策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
一个对象有很多行为,避免用众多if……else if这种形式把这些行为转移到相应的具体策略中,可避免难以维护的多重选择。
适用场景:一个系统需动态的在几种算法中选一种。
1 //抽象策略接口 2 interface Strategy{ 3 //策略方法 4 public void method(); 5 } 6 7 //具体策略类 8 class ConcreteStrategyA implements Strategy{ 9 10 @Override 11 public void method() { 12 //具体业务代码 13 } 14 15 } 16 17 class ConcreteStrategyB implements Strategy{ 18 19 @Override 20 public void method() { 21 //具体业务代码 22 } 23 24 } 25 26 //环境角色类 27 class Context{ 28 //持有一个具体策略对象 29 private Strategy strategy; 30 31 public Context(Strategy strategy){ 32 this.strategy = strategy; 33 } 34 35 //策略方法 36 public void method(){ 37 strategy.method(); 38 } 39 }