定义
Strategy Pattern:定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。
模版方法模式的区别在于:在模版方法模式中,调用算法的主体在抽象的父类中,而在策略模式中,调用算法的主体则是封装到了封装类Context中,
抽象策略Strategy一般是一个接口,目的只是为了定义规范,里面一般不包含逻辑。
类图
角色
- Context(环境类):维护指向具体策略的引用, 且仅通过策略接口与该对象进行交流。目的是避免高层模块对策略的直接调用。
- Strategy(抽象策略类):通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这部分公共的代码,此时,策略模式看上去更像是模版方法模式。
- ConcreteStrategy(具体策略类):它实现了在抽象策略类中声明的算法,在运行时,具体策略类将覆盖在环境类中定义的抽象策略类对象,使用一种具体的
算法实现某个业务处理。
优缺点
- 开闭原则
- 多重if/else的解决方式之一
使用场景
- Arrays.sort()