一句话总结:
策略设计模式,封装了一些列可平行的算法,让客户灵活的调用。
代码结构:
算法的接口Strategy;具体的方法StrategyA,StrategyB,StrategyC;算法的管理类Context;客户端
具体代码:
算法的接口Strategy:
package strategy2;
public interface Strategy {
void doSomething(Context context);
}
具体的方法StrategyA,StrategyB:
package strategy2;
public class StrategyA implements Strategy {
@Override
public void doSomething(Context context) {
System.out.println("StrategyA");
}
}
package strategy2;
public class StrategyB implements Strategy {
@Override
public void doSomething(Context context) {
System.out.println("StrategyB");
}
}
算法的管理类Context:
package strategy2;
public class Context {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void doSomething(){
if (null != strategy) {
strategy.doSomething(this);
}
}
}
客户端:
package strategy2;
public class Main {
public static void main(String[] args) {
Context context = new Context();
StrategyA strategyA = new StrategyA();
context.setStrategy(strategyA);
context.doSomething();
context.setStrategy(new StrategyB());
context.doSomething();
}
}
代码分析:策略设计模式中的算法,是肯定不能少的。但是,算法管理类,似乎可以去掉。但是,如果有些算法需要额外的参数,有些不需要,这时context就其作用了。因为我已经把context作为参数,给了strategy接口了,需要参数的算法,可以通过context随意获得参数。
适用场景:
商场打折,工资结算等等;
优点:
1.可以动态的选择算法;
缺点:
1.客户端要对所有的算法都有了解,这个算法多的时候,有点难度。
写的比较好的博客: