主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
应用实例
- 诸葛亮的锦囊妙计,每一个锦囊就是一个策略。
- 旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。
优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。
实现
创建一个接口类
class Strategy:
def do_operation(self, num1, num2):
raise NotImplementedError()
创建实现接口的实体类 ```python class OperationAdd(Strategy): def do_operation(self, num1, num2):
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)
使用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}")