策略模式-Strategy
策略模式:它将可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现。
它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到实用算法的客户。
策略模式类图:
实现方式:
- 分离变化得到策略接口strategy
- 编写strategy的具体实现类
- 将srategy聚合到使用策略的类中
- 根据具体的场景传入stratugy的不同实现
代码实现:
策略模式的设计原则:
找出应用中需要变化的部分,把他们独立出来,不要和那些不需要变化的代码混在一起。(封装变化)
面向接口,而不是面向编程实现
Favor composition over inheritance
策略模式的优缺点:
优点:
使用了聚合的方式,使架构更加灵活
富有弹性,可以较好的应对变化(开闭原则)
更好的代码复用性(相对于继承)
缺点:
客户端代码需要了解每个策略的实现细节
增加了对象的数目
策略模式的适用场景:
许多相关的类仅仅是行为差异
运行时选取不同的算法变体
通过条件在多个分支中选取一