策略模式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");
}
}