策略模式:它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
结构图:
代码实现
abstrace class Strategy{ //定义一个抽象类——策略类
public abstract void AlgorithmInterface(); //声明一个策略方法,具体由子类实现
}
class ConcreteStrategyA extends Strategy{ //实现一个策略类,并实现自己的策略方法
public void AlgorithmInterface(){
//TODO
}
}
class ConcreteStrategyB extends Strategy{ //实现一个策略类,并实现自己的策略方法
public void AlgorithmInterface(){
//TODO
}
}
class ConcreteStrategyC extends Strategy{ //实现一个策略类,并实现自己的策略方法
public void AlgorithmInterface(){
//TODO
}
}
class Context { //定义一个上下文类,当作具体的业务环境吧
public Strategy mStrategy=null; //业务中依赖的策略类,这里声明的是接口哦,
// 所以可以接受子类赋值
public Context(Strategy s){
mStrategy=s; //控制倒转,通过构造方法注入实例
}
public void contextInterface(){
mStrategy.AlgorithmInterface(); //调用注入对象的方法
}
//客户端代码
public static void main(String[] args){
Context context;
context=new Context(new ConcreteStrategyA());
//context=new Context(new ConcreteStrategyB())
context.contextInterface();
}
}
参阅:《大话设计模式》