策略模式

策略模式

策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。
  

这个模式涉及到三个角色:

  ●环境(Context)角色:持有一个Strategy的引用。

  ●抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。

  ●具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。
例子:
  如普通顾客跟vip顾客买东西结账,都是结账,但是走的策略不一样,通过顾客是否是vip走不同的策略,过程相同 ,但结果不同

 策略模式的优缺点
        优点:
        符合开闭原则
        避免使用多重if、else语句和switch
        提高算法的保密性和安全性
        缺点
        客户端必须知道所有的策略,自己决定使用哪一种策略
        代码中会出现很多的策略类,增加系统维护难度

代码示例:

抽象策略类:

public interface Strategy {

	void doing();
}

具体实现策略类(付费打折否):

public class AStrategy implements Strategy {

	@Override
	public void doing() {
		System.out.println("执行A策略");
	}

}
public class BStrategy implements Strategy {

	@Override
	public void doing() {
		System.out.println("执行B策略");
	}

}

环境(Context)角色(结账):

public class Context {

	private Strategy strategy;
	
	public Context(Strategy strategy) {
		this.strategy = strategy;
	}
	//执行不同的策略
	public void getStrategy() {
		this.strategy.doing();
	}
}

测试:

public class TextStrategy {

	public static void main(String[] args) {
		
		Context con = new Context(new AStrategy());
		con.getStrategy();
		
	}
}

 

上一篇:windows技巧02---------输入特殊字符


下一篇:面试问题——英语12 东兴 新手 困难 工作