引言
- 一个一个来吧,面试腾讯的时候,问了我单例模式相关的东西,自己这方面的东西,还没有看过。这里需要需要补充一下。
- 但是设计模式有很多,今天就来了解简单工厂模式、策略模式以及单例模式的。
- 道阻且长,一步一步来吧。
- 这里所有的材料和截图都是来自于《大话设计模式》
正文
简单工厂模式
- 对于程序开发中,容易改变的地方,应该考虑使用一个单独的类来做这个创建实例的过程,这就是工厂。
- 使用一个factory作为工厂类,其中的成员代表它能够生产的产品的类别,然后具体的产生的样本是这个产品类别对应的具体的不同的实例对象。
- 加减乘除等几个操作符号都是operation操作符号的子类,通过父类接口可以进行调用。
为什么叫做工厂
- 个人理解,你给我一个加工指标,我给你一个对应的符合你指标的对象,然后统一用这些子类加工指标的父类进行处理。
策略模式
- 定义了算法家族,分别封装起来,让他们之间可以互相替换
- 该模式让算法的变化,不会影响到使用算法的客户。
具体结构图如下
- 具体的所有的策略都是继承Strategy,然后具体实现对应的抽象方法,通过strategy接口来调用不同子类对象,实现多态
- context会以父类成员实例对象作为成员函数,对应的构造函数中需要传入对应的strategy对象,然后在调用对应的接口。
具体调用图如下
- 需要的在context中传入具体已经创建好的对象,也就是说对象是在接口界面创建的。
策略模式和工厂模式的结合
- 将具体的工厂对象工厂的算法子类进行替换,context中返回的是结果,接受的是需要处理的不同对象,然后是通过单例模式调用的
- 将对象的创建和接口信息统一转移到context文件中,
- 简单工厂模式,让客户知道CashSuper以及对应的具体的现金工厂对象,相当于同时知道两个类。
- 但是将策略模式和工厂模式融合之后,客户端只需要的知道cashcontext这一个策略上下文对象,进一步实现解耦。
策略模式解析
- 针对完成功能相同==》输入和输出是相同,但是具体的实现逻辑和细节是不同的,所以需要以相同的方式调用所有的算法,减少各类算法和实用类之间的耦合度
优点
策略模式的Strategy类层次为 Context定义了一系列可供重用的算法,继承有助于析取这些算法中的公共功能的
- 不同的打折策略公共的功能,就接受金额,并返回金额。
简化了单元测试,每一个算法都有自己的类,可以通过自己的接口单独测试
总结
- 策略模式是用来封装算法的,不仅仅用来封装算法,可以封装几乎任何类型的规则
- 只要在分析过程中,听到的需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化
- 基本策略模式中,选择所用具体实现的职责给客户端对象承担,然后再将实例化之后的对象,转给策略模式的context对象
总结
- 今天太晚了,太累了,上午面试的东西,下午花了很多时间去整理,然后有准备了一下奖学金的申领的内容。已经到深夜了。又没有刷算法,又没有完全看完,不过太累了。
- 明天早点起,加油吧!