设计模式-策略模式
已于 2025年06月01日 18:04 修改
访问次数:0
我们以 加减法运算 为例来演示策略模式的用法。
🎯 示例需求
创建一个计算器程序,用户可以动态选择使用 加法 或 减法 运算。这正好适合用策略模式来封装“运算行为”。
🧱 UML 类图(简化版)
+-------------------+
| Context | --> Calculator
+-------------------+
| - strategy |
| + set_strategy() |
| + calculate() |
+-------------------+
|
v
+-------------------+ +------------------------+
| Strategy |<------+ AddStrategy |
| (OperationStrategy)| +------------------------+
+-------------------+ +------------------------+
| SubtractStrategy |
+------------------------+
🐍 Python 实现:加减法策略模式
from abc import ABC, abstractmethod
# 抽象策略类
class OperationStrategy(ABC):
@abstractmethod
def execute(self, a, b):
pass
# 具体策略:加法
class AddStrategy(OperationStrategy):
def execute(self, a, b):
return a + b
# 具体策略:减法
class SubtractStrategy(OperationStrategy):
def execute(self, a, b):
return a - b
# 上下文类
class Calculator:
def __init__(self, strategy: OperationStrategy):
self._strategy = strategy
def set_strategy(self, strategy: OperationStrategy):
self._strategy = strategy
def calculate(self, a, b):
return self._strategy.execute(a, b)
# 使用示例
if __name__ == "__main__":
# 使用加法策略
calc = Calculator(AddStrategy())
result = calc.calculate(10, 5)
print(f"加法结果: {result}") # 输出:加法结果: 15
# 切换到减法策略
calc.set_strategy(SubtractStrategy())
result = calc.calculate(10, 5)
print(f"减法结果: {result}") # 输出:减法结果: 5
✅ 总结:你学到了什么?
| 组件 | 作用 |
|---|---|
OperationStrategy | 抽象运算接口 |
AddStrategy | 实现加法运算 |
SubtractStrategy | 实现减法运算 |
Calculator | 作为上下文类调用策略方法 |
这种结构使得添加新的运算(乘法、除法)非常简单,只需实现一个新的策略类,无需修改已有代码,符合开闭原则。
如果你想继续扩展乘除法或支持复合表达式,也可以告诉我,我可以继续扩展。
评论(0)