1.策略模式
当一个问题需要多种处理方式且这几种处理方式都仅仅是在具体行为上有差异时,我们可以将这个差异抽象出来作为一个统一的接口。然后,使用者在运行时就可以根据实际情况选择不同的接口实现来处理这个问题,这个接口实现可以理解为策略。用不同的策略来解决同一个或同一类问题,即策略模式。
举例说明:
设计一个运算系统,可以采用不同策略 (加、减、乘、除) 来对两个数字进行运算。
// 抽象出来的策略接口
public interface Strategy {
int doOperation(int a, int b);
}
// 策略:加
public class AddStrategy implements Strategy {
@Override
public int doOperation(int a, int b) {
return a + b;
}
}
// 策略:减
public class SubtractionStrategy implements Strategy {
@Override
public int doOperation(int a, int b) {
return a - b;
}
}
// 策略:乘
public class MultiplyStrategy implements Strategy {
@Override
public int doOperation(int a, int b) {
return a * b;
}
}
// 策略:除
public class DivisionStrategy implements Strategy {
@Override
public int doOperation(int a, int b) {
return a / b;
}
}
// 运算系统 (上下文)
public class Context {
private int mA;
private int mB;
private Strategy mStrategy;
public Context(int a, int b) {
mA = a;
mB = b;
// 默认策略为 “加运算”
mStrategy = new AddStrategy();
}
public int execute() {
return mStrategy.doOperation(mA, mB);
}
public void setStrategy(Strategy strategy) {
mStrategy = strategy;
}
}
策略模式优点:
- 算法可以自由切换。
- 避免使用多重条件进行判断。
- 扩展性好。
策略模式缺点:
- 策略类会增多。
- 所有策略类都需要对外暴露。
策略模式使用场景: