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