策略模式
一、概念
策略模式英文名为Strategy,它定义了一个算法家族,主要对各种不同的算法进行封装。与简单工厂模式很类似,策略模式对每个算法有一个基类,每个算法都实现或继承该基类,当需要增加某个算法的时候只需增加对应的算法实现类即可。与工厂模式不同在于用户不需要知道具体的算法实现类就可以使用具体某个算法。简单类图如下:
二、具体代码
抽象策略接口
public interface IStrategy {
void algorithmStrategy();
}
策略A
public class StrategyA implements IStrategy{
@Override
public void algorithmStrategy() {
System.out.println("算法A。。。。");
}
}
策略B
public class StrategyB implements IStrategy{
@Override
public void algorithmStrategy() {
System.out.println("算法B。。。。");
}
}
策略上下文
public class StrategyContext {
private IStrategy mStrategy;
public StrategyContext(String strategyType) {
generateStrategy(strategyType);
}
private void generateStrategy(String strategyType){
switch (strategyType){
case "StrategyA":
mStrategy = new StrategyA();
case "StrategyB":
mStrategy = new StrategyB();
}
}
public void algorithmStrategy(){
if(this.mStrategy != null){
this.mStrategy.algorithmStrategy();
}
}
}
客户端代码
public class TestMain {
public static void main(String[] args){
StrategyContext strategyContext = new StrategyContext("StrategyA");
strategyContext.algorithmStrategy();
}
}
总结
优点
1、策略模式封装了变化,增加不同的算法,对用户是透明的;
2、便于写单元测试
缺点
1、和工厂模式类似,没当增加一种策略或算法,不仅增加对应的算法类,还需修改StrategyContext类,当然可以通过反射解决此问题,这就后话了。
参考资料
《大话设计模式》