码迷,mamicode.com
首页 > 其他好文 > 详细

策略模式

时间:2016-08-02 22:18:23      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

定义:一组算法,将每个算法都封装起来,并是他们之间可以互换


类图:

技术分享


代码:

public interface Strategy {

	public void doSomething();
}
public class ConcreteStrategy1 implements Strategy{

	@Override
	public void doSomething() {
		
	}

}

public class ConcreteStrategy2 implements Strategy{

	@Override
	public void doSomething() {
		
	}

}

public class Context {
   Strategy strategy = null;
   
   public Context(Strategy strategy){
	   this.strategy = strategy;
   }
   
   public void doAnything(){
	   strategy.doSomething();
   }
}
优点:

1.算法可自由切换

2.避免使用多重的条件判断

3.扩展性好

缺点:

1.策略类增多

2.所有策略类都需要对外暴露


使用场景

1.多个类只有算法或者行为上稍有不同】

2.算法需要自由切换

3.需要屏蔽算法的规则


注意:

当策略类超过4个,需要考虑回合模式


扩展(策略枚举)


Demo代码:

public enum Calculator {

	ADD("+"){
		public int exec(int a,int b){
			return a+b;
		}
	},
	Sub("-"){
		public int exec(int a,int b){
			return a-b;
		}
	};
	String value = "";
	private Calculator(String value){
		this.value = value;
	}
	
	public String getValue(){
		return value;
	}
	
	public abstract int exec(int a,int b);
}

public class Client {

	public static void main(String[] args){
	
		int a = Integer.parseInt(args[0]);
		String symbol = args[1];
		int b = Integer.parseInt(args[2]);
		System.out.println("a+b = "+ Calculator.ADD.exec(a, b));
	}
}

优点:

代码量少,而且语义明确


注意:

策略枚举是一个非常优秀方便的模式,但是它受枚举类型的限制

策略模式

标签:

原文地址:http://blog.csdn.net/renpengddxx/article/details/52098264

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!