人若无名,练剑十年~~
一、策略模式与简单工厂模式的结合
接着上篇继续去写:改造后的CashContext的代码如下:
客户端的代码如下:
二、总结这样做法的优点:
1、这样做比上一篇的策略模式中的客户端的代码更清晰多了。
2、而在简单工厂模式中需要让客户端记住两个类:CashSuper和CashFactory。而策略模式和简单工厂结合的用法,客户端只需要认识一个类CashContext类就可以了。耦合度降低了,具体的收费算法与客户端分离,连算法的父类的CashSuper都不让客户端认识了。
三、策略模式解析:
1、策略模式是一种定义一系列算法的行为,从概念上来看,所有这些算法完成的都是相同的工作,只是实现方式不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
2、策略模式的Strategy类层为Context定义了一系列的可供重用的算法或者行为,继承有助于析取出这些算法中的公共功能,在上面的例子中,公共的功能就是指计算费用的结果。
3、策略模式的优点简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。
4、策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。
5、但是在基本的策略模式中,选择所用具体实现的职责由客户端对象来承担,并转交给策略模式的Context对象,这样并没有解除客户端需要选择判断的压力。但是策略模式和简单工厂模式的结合后,选择具体实现的职责可以由Context来承担,这就是最大化地减轻了客户端的压力。
四、简单工厂+策略模式的缺点:
1、在CashContext中用到了switch,如果新增一个算法的话,这里必须修改switch的代码。也是很不爽的,因为任何需求的变更都是需要成本的,高手和菜鸟的区别就是需求变更时改动小。
五、解决上面的问题:
可以用反射的思想,后面继续写它,完善它。
今天先到这了,明天见~~