设计模式-策略模式

我们以 加减法运算 为例来演示策略模式的用法。



🎯 示例需求

创建一个计算器程序,用户可以动态选择使用 加法减法 运算。这正好适合用策略模式来封装“运算行为”。



🧱 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)