知识点
- 对于多分类的情况,大部分需要考虑是否需要使用strategy模式,原因是这样可以松耦合,把各类情况单独处理,从而可以独立扩展。
- 小部分,对于分类固定不变,比如男女分类,这种可以直接使用if else/switch case 模式。
- strategy模式,减少高级缓存的占用,提高代码效率。
- 策略模式仅仅封装算法(包括添加 & 删除),但策略模式并不决定在何时使用何种算法,算法的选择由客户端来决定
优点
- 策略类之间可以自由切换由于策略类都实现同一个接口,所以使它们之间可以自由切换。
易于扩展 - 增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合“开闭原则“
- 避免使用多重条件选择语句(if else),充分体现面向对象设计思想。
缺点
- 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
- 策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。
个人解读
这和前面的template Method 模式有什么不同,感觉都是使用C++多态来来实现。
从定义来看:
- template Method 更加注重的是整个算法的模块之间的依赖顺序,主体算法骨架的稳定性,考虑中间过程的一些算法实现可以重新定义,晚绑定,依赖于应用时需要怎么样的功能。
- strategy 更加注重某一个系列的算法的组成关系,是各自独立实现,可扩展的。