策略模式

Catalogue   

定义

Strategy Pattern:定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。

模版方法模式的区别在于:在模版方法模式中,调用算法的主体在抽象的父类中,而在策略模式中,调用算法的主体则是封装到了封装类Context中,
抽象策略Strategy一般是一个接口,目的只是为了定义规范,里面一般不包含逻辑。

类图

角色

  • Context(环境类):维护指向具体策略的引用, 且仅通过策略接口与该对象进行交流。目的是避免高层模块对策略的直接调用。
  • Strategy(抽象策略类):通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这部分公共的代码,此时,策略模式看上去更像是模版方法模式。
  • ConcreteStrategy(具体策略类):它实现了在抽象策略类中声明的算法,在运行时,具体策略类将覆盖在环境类中定义的抽象策略类对象,使用一种具体的
    算法实现某个业务处理。

优缺点

  • 开闭原则
  • 多重if/else的解决方式之一

使用场景

  • Arrays.sort()

参考