策略模式属于对象的行为模式。每一个策略都有一个共同的接口,从而使得它们可以相互替换。
我理解的策略模式其实本质就是Java的多态思想:用父类型的引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为。
这个模式涉及到三个角色:
● 环境(Context)角色:持有一个Strategy的引用。
● 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
● 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。
源代码
环境角色类
public class Context { //持有一个具体策略的对象 private Strategy strategy; /** * 构造函数,传入一个具体策略对象 * @param strategy 具体策略对象 */ public Context(Strategy strategy){ this.strategy = strategy; } /** * 策略方法 */ public void contextInterface(){ strategy.strategyInterface(); } }
抽象策略类
public interface Strategy { /** * 策略方法 */ public void strategyInterface(); }
具体策略类
public class ConcreteStrategyA implements Strategy { @Override public void strategyInterface() { //相关的业务 } }
public class ConcreteStrategyB implements Strategy { @Override public void strategyInterface() { //相关的业务 } }
public class ConcreteStrategyC implements Strategy { @Override public void strategyInterface() { //相关的业务 } }