策略模式(Strategy Pattern)属于行为型模式,一个类的行为或其算法可以在运行时更改。

策略模式的目的:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换,在有多种算法相似的情况下,避免使用 if…else 所带来的复杂和维护困难。
策略模式实现的2种方式:接口策略模式和枚举策略模式
  1. 接口策略模式
    通过继承接口去实现,所有的策略都需要继承底层接口实现类,实现一个策略执行类,通过执行类去执行各自的逻辑。
    代码示例如下:
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. 枚举策略模式 枚举的形式更加简洁
    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);
    }