策略模式(Strategy Pattern)
发布于:2018-08-17 10:10:00
访问:
策略模式(Strategy Pattern)属于行为型模式,一个类的行为或其算法可以在运行时更改。
策略模式的目的:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换,在有多种算法相似的情况下,避免使用 if…else 所带来的复杂和维护困难。
策略模式实现的2种方式:接口策略模式和枚举策略模式
- 接口策略模式
通过继承接口去实现,所有的策略都需要继承底层接口实现类,实现一个策略执行类,通过执行类去执行各自的逻辑。
代码示例如下:
1 2 3 4 5
| //顶层接口类 public interface Calculator {
public int calculte(int a1, int a2); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| //加法逻辑 public class AddCalculator implements Calculator {
@Override public int calculte(int num1, int num2) { return num1 + num2; }
} //减法逻辑 public class SubCalculator implements Calculator {
@Override public int calculte(int num1, int num2) { return num1 - num2; }
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 策略执行类 public class CalculatorStrategy {
private Calculator calculator;
// 通过构造方法传入具体的策略类 public CalculatorStrategy(Calculator calculator) { this.calculator = calculator; }
/** * 策略执行 */ public int exec(int num1, int num2) { return this.calculator.calculte(num1, num2); } }
|
- 枚举策略模式 枚举的形式更加简洁
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public enum Calculator {
ADD() { @Override public int calculate(int num1, int num2) { return num1 + num2; } }, SUB() {
@Override public int calculate(int num1, int num2) { return num1 - num2; }
}; public abstract int calculate(int num1, int num2); }
|