标签:
定义:一组算法,将每个算法都封装起来,并是他们之间可以互换
类图:
代码:
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