Context(环境类):使用算法的角色,维持一个对抽象策略类的引用实例,用于定义所有采用的策略。 Strategy(抽象策略类):为所支持的算法声明了抽象方法,可以是接口也可以是抽象类或具体类。 ConcreteStrategy(具体策略类):实现抽象策略类中声明的算法,运行时,具体策略类将覆盖在环境策略类中定义的抽象策略类,使用一种具体的算法实现某个业务处理。策略模式UML结构
典型代码框架
abstract class AbstractStrategy { public abstract void algorithm(); } class ConcreteStrategy extends AbstractStrategy { public void algorithm() { ... } } class Context { private AbstractStrategy strategy; public void setStrategy(AbstractStrategy strategy) { this.strategy = strategy; } public void algorithm() { strategy.algorithm(); } } // 客户端代码段 ... Context context = new Context(); AbstractStrategy strategy; strategy = new ConcreteStrategy(); //通过注入的方式出入具体的策略 context.setStrategy(strategy); context.algorithm(); ...