应用场景
策略模式,英文名Strategy Pattern
该模式将一组算法(业务方案)封装起来,使用时根据需要动态切换对应的算法去解决问题
该模式的优点是,方案可以自由切换,动态插拔,不必使用许多if-else来判断如何处理
一般适用于以下场景
- 解决方案有多种,需要自由切换
- 不希望方案细节暴漏给使用者,使用者直接调用现成对象即可
代码实现一
public interface Strategy {
void resolve();
}
public class StrategyA implements Strategy {
@Override
public void resolve() {
}
}
public class StrategyB implements Strategy {
@Override
public void resolve() {
}
}
public class Problem {
//根据需要动态替换
public Strategy strategy;
public void resolve() {
strategy.resolve();
}
}
代码实现二
当常用的策略类型为有限个时,可以通过枚举类的方式,将多种策略整合到一个枚举类中
public enum Strategy {
ADD("+") {
@Override
public int calculate(int a, int b) {
return a + b;
}
},
SUB("-") {
@Override
public int calculate(int a, int b) {
return a - b;
}
},
MULT("*") {
@Override
public int calculate(int a, int b) {
return a * b;
}
},
DIV("/") {
@Override
public int calculate(int a, int b) {
return a / b;
}
};
private String type;
private Strategy(String type) {
this.type = type;
}
@Override
public String toString() {
return type;
}
public abstract int calculate(int a, int b);
}