策略模式
行为模式关注行为和算法的封装。
创造模式关注对象的创建,客户端程序无权通过new的方式申请内存,构建对象。创造者模式提供方法供客户端选择。
Context 为实际算法的调用者,Strategy为算法的统一对外接口,不同的算法对其有不同的实现。
Context只需依赖不同的算法,就可以通过统一的Startegy接口,来实现算法之间的调用。
Strategy通常使用抽象类来实现,抽出算法中公共的逻辑代码,避免代码重复
策略模式结构解析
- Context: 对策略进行二次封装,避免高层代码直接对策略逻辑进行调用。
- AbstractStrategy: 为环境类提供统一对外接口;对算法的公共逻辑进行封装,避免代码重复。
- StrategyA,StrategyB: 具体的策略,根据注入的不同进行切换。
Tips: 善用抽象类,模板模式来进行解耦,增加代码之间调用的灵活性。
策略模式优点
- 支持开放封闭原则,可以灵活的增加其他策略,也可以方便的修改某一个算法的逻辑。
- 避免多重判断条件,不利于后期维护。
策略模式缺点
- 必须暴露所有的策略,供客户端程序选择调用。程序的关联性太强。
- 代码量大量增加。