策略模式Strategy
定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
策略模式是一种定义一些列算法的方法,所有这些算法完成的工作相同,但是实现不同,它可以用相同的方式调用所有的算法,减少各种算法类与使用算法类之间的耦合。
Strategy类层次为Context定义了一系列的可重用的算法或者行为。继承有助于析取出这些算法中的公共功能。
当不同的行为堆砌在一个类里面的时候,就很难避免用条件语句来选择合适的行为。将这些行为封装在独立的Strategy类中,可以使用这些行为的类中消除条件语句。
策略模式可以用来封装几乎任何类型的规则。只要在分析过程中听到需要在不同世界应用不同的业务规则,就可以考虑使用策略模式处理这变化的可能性。
package strategy.pattern;public class StrategyPattern { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Context context; context=new Context(new ConcreteStrategyA()); context.ContextInterface(); context=new Context(new ConcreteStrategyB()); context.ContextInterface(); context=new Context(new ConcreteStrategyC()); context.ContextInterface(); }}
package strategy.pattern;public interface Strategy { public void AlgorithmInterface(); }
package strategy.pattern;public class Context { private Strategy stragety; public Context(Strategy stragety){ this.stragety=stragety; } public void ContextInterface(){ stragety.AlgorithmInterface(); }}
package strategy.pattern;public class ConcreteStrategyA implements Strategy { @Override public void AlgorithmInterface() { // TODO Auto-generated method stub System.out.println("Concrete Algorithm A"); }}
package strategy.pattern;public class ConcreteStrategyB implements Strategy { @Override public void AlgorithmInterface() { // TODO Auto-generated method stub System.out.println("Concrete Algorithm B"); }}
package strategy.pattern;public class ConcreteStrategyC implements Strategy { @Override public void AlgorithmInterface() { // TODO Auto-generated method stub System.out.println("Concrete Algorithm C"); }}