该篇主要说明的是策略模式。
定义
定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。
策略模式也叫做政策模式。
角色
Context封装角色
封装可能变化的存在。
Strategy抽象策略角色
策略、算法家族的抽象。通常为接口。
ConcreteStrategy具体策略角色
实现抽象策略中的操作,该类含有具体的算法。
代码
抽象的策略角色
public interface Strategy {
void doSomething();
}
具体的策略角色
public class ConcreteStrategy01 implements Strategy {
@Override
public void doSomething() {
System.out.println("01");
}
}
封装角色
public class Context {
private Strategy strategy = null;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void doAnything(){
this.strategy.doSomething();
}
}
注意:
策略模式借用了代理模式的思路,不同的是,策略模式的封装角色和被封装的策略类不用的是同一个接口,如果是同一个接口,则是代理模式。
策略模式优缺点
优点
- 算法可以自由切换
- 避免使用多重条件判断
- 扩展性良好
缺点
- 策略类数量增多
- 所有的策略类都需要对外暴露