应该作为ifelse多个条件判断的最佳替代
这里不是说ifelse不够清晰,相反,策略模式正是利用了ifelse的清晰
因为业务代码中并不是简单的ifelse,而是一个ifelse之间可能间隔了几十行垃圾业务代码,而且判断的条件很模糊,看不懂
简单的ifelse当然清晰,策略模式正是将业务代码变成简单的ifelse
所以,我们要将代码改造成以下这样:
public interface CalculateStrategy{
void calculate();
}
public class StrategyA implements CalculateStrategy{
public void calculate(){
System.out.println("策略A的业务逻辑");
}
}
public class StrategyB implements CalculateStrategy{
public void calculate(){
System.out.println("策略B的业务逻辑");
}
}
简单工厂的作用是扔进去参数拿到策略实现类,做策略和使用者的解耦
public class CalculateStrategyFactory {
public CalculateStrategy getCalculateStrategy(int param) {
if (param = "A") {
return new StrategyA();
} else if (param = "B") {
return new StrategyB();
}
}
}
上下文类的作用是使用工厂产生的策略,执行策略
public class Context {
private CalculateStrategy strategy;
public Context (strategy) {
this.strategy = strategy;
}
public void calculate() {
strategy.calculate();
}
}
使用时,和ifelse一样,传递的param就是原先ifelse的判断条件,把原先每个ifelse中间的代码都划分到各个策略类中:
CalculateStrategy strategy = CalculateStrategyFactory.getCalculateStrategy(param);
Context context = new Context(strategy);
context.calculate();