策略设计模式

2018, Apr 19    

策略设计模式

策略模式:定义一组算法

策略模式和代理模式有什么差别,差别就是策略模式的封装角色和被封装的策略类不用是同一个接口(封装角色(相当于代理角色)没有实现接口)

策略模式和模板模式有什么差别,一个“策略”是一个 整体的(完整的) 算法,算法是可以被整体替换 ;模板方法定义一条线(算法流程),线上的多个点是可以变化的(具体实现在子类中完成)

  1. 策略接口

    public interface Strategy {
    	public void doSomething();
    }
    
  2. 具体策略(相当于代理模式的真实角色)

    public class ConcreteStrategy implements Strategy {
    	public void doSomething() {
    		System.out.println("具体策略1的运算法则");
    	}
    }
    
  3. 封装角色(相当于代理模式的代理角色,但是封装角色,并不实现接口)

    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();
	}
}