策略模式(Strategy)
Strategy 属于行为模式,用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换,它可以客户端的选择来,决定用什么实现。
Context(上下文环境) 其内组合了一个策略的抽象类,然后具体的实现交给继承策略抽象类的子类去实现。
从上面一句话,可以看到,Strategy 涉及到三个角色:
Context环境角色:它是使用策略模式的场景,即持有一个策略类。
抽象策略角色:这是一个抽象角色,通过是由一个接口事抽象类实现,这个类提供所有的具体策略所需的接口。
具体策略(ConcreteStrategy)角色:实现抽象策略类提供的接口,不同的实现,有不同的具体策略类。
模板可以是这样的:
上下文角色:
public class Context{ private Strategy strategy; /** * 策略方法,算法 */ public void algorithm() { strategy.strategyAlgorithm(); }}
public abstract class Strategy { /** * 抽象策略方法,算法 */ public abstract void strategyAlgorithm(); }
public class ConcreteStrategy extends Strategy{ /** * 策略实现 */ public void strategyAlgorithm() { //different subStrategy have different algorithm }}