主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。

应用实例

  1. 诸葛亮的锦囊妙计,每一个锦囊就是一个策略。
  2. 旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。

优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。

实现

  1. 创建一个接口类

    1. class Strategy:
    2. def do_operation(self, num1, num2):
    3. raise NotImplementedError()
  2. 创建实现接口的实体类 ```python class OperationAdd(Strategy): def do_operation(self, num1, num2):

    1. return num1 + num2

创建Context类

class OperationSubtract(Strategy): def do_operation(self, num1, num2): return num1 - num2

class OperationMultiply(Strategy): def do_operation(self, num1, num2): return num1 * num2


3. 创建Context类
```python
class Context:
    def __init__(self, strategy: Strategy):
        self.strategy = strategy

    def execute_strategy(self, num1, num2):
        return self.strategy.do_operation(num1, num2)
  1. 使用Context来查看当它改变Strategy时的变化

    if __name__ == '__main__':
     res = Context(OperationAdd()).execute_strategy(1, 2)
     print(f"执行加操作:{res}")
    
     res = Context(OperationSubtract()).execute_strategy(1, 2)
     print(f"执行减操作:{res}")
    
     res = Context(OperationMultiply()).execute_strategy(1, 2)
     print(f"执行乘操作:{res}")