策略设计模式
2018, Apr 19
策略设计模式
策略模式:定义一组算法
策略模式和代理模式有什么差别,差别就是策略模式的封装角色和被封装的策略类不用是同一个接口(封装角色(相当于代理角色)没有实现接口)
策略模式和模板模式有什么差别,一个“策略”是一个 整体的(完整的) 算法,算法是可以被整体替换 ;模板方法定义一条线(算法流程),线上的多个点是可以变化的(具体实现在子类中完成)
-
策略接口
public interface Strategy { public void doSomething(); }
-
具体策略(相当于代理模式的真实角色)
public class ConcreteStrategy implements Strategy { public void doSomething() { System.out.println("具体策略1的运算法则"); } }
-
封装角色(相当于代理模式的代理角色,但是封装角色,并不实现接口)
public class Context { //抽象策略 private Strategy strategy = null; //构造函数设置具体策略 public Context(Strategy strategy){ this.strategy = strategy; } //封装后的策略方法(这是和策略方法和不是抽象接口中的方法) public void doAnythinig(){ this.strategy.doSomething(); } }
测试函数
public class Client {
public static void main(String[] args) {
//声明一个具体的策略
Strategy strategy = new ConcreteStrategy1();
//声明上下文对象
Context context = new Context(strategy);
//执行封装后的方法
context.doAnythinig();
}
}