大话设计模式:2.策略模式
目录
大话设计模式:2.策略模式
策略模式:定义了算法家族,分别封装,相互之间可以替换,使算法的变换不会影响使用算法的客户。
TL;DR:策略模式就是来封装变化、封装算法的。
策略模式 与 多态
策略模式的核心是抽象了完成相同工作,但实现不同的算法。它使得所有算法以相同的方式被调用。可能是面向对象语言思想的缘故,从实现上看,策略模式其实就是在使用多态,并且将变化点通过单独的context类进行封装,即封装变化点。
在具体实现上使用策略模式,父类或抽象类定义算法方法,子类各自实现算法。context类中包含父类对象,在初始化时,通过子类创建,并提供context类的方法,调用子类方法,实现了对变化点的封装。然而用户在使用context类调用算法时,仍然需要知道子类的构造方法,这是实例化的问题,可以由简单工厂模式解决,因此策略模式配合简单工厂模式,可以继续将算法的实例化过程封装,使算法对用户完全不可见,用户只通过context的方法,创建并调用各个算法,最终使得算法和客户彻底分离。
策略模式的优点
- 减少了个算法类间的耦合,即多态的优点
- 简化了单元测试,每个算法可以通过自己的接口单独测试
策略模式的应用场景
在不同时间应用不同业务规则时,使用策略模式。
策略模式的问题
策略模式没有解除客户端对选择判断的压力,虽然简单工厂模式减轻了客户端的这一负担,但在context中仍然需要条件判断,可以通过反射技术来进一步优化(后面抽象工厂才会讲,期待ing)
这一章反复看了好几遍才大致缕清了,啊啊还有好多事儿冲冲冲!!