策略模式是一种行为设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。

策略模式结构

在Python中实现策略模式通常包含以下角色:

  • Context(环境类):维护一个策略对象的引用,并负责调用策略对象的方法。
  • Strategy(策略接口):定义所有支持的算法的公共接口。
  • ConcreteStrategy(具体策略类):实现Strategy接口,定义所有支持的算法。

示例

以下是一个简单的示例,演示了如何使用策略模式来处理不同类型的折扣。

Context

class DiscountContext:
    def __init__(self, strategy):
        self._strategy = strategy

    def set_strategy(self, strategy):
        self._strategy = strategy

    def calculate_discount(self, price):
        return self._strategy.calculate_discount(price)

Strategy

class DiscountStrategy:
    def calculate_discount(self, price):
        pass

ConcreteStrategy

class PercentageDiscount(DiscountStrategy):
    def __init__(self, percentage):
        self.percentage = percentage

    def calculate_discount(self, price):
        return price * self.percentage

class FixedDiscount(DiscountStrategy):
    def __init__(self, amount):
        self.amount = amount

    def calculate_discount(self, price):
        return self.amount

使用策略

# 创建具体策略对象
percentage_strategy = PercentageDiscount(0.1)
fixed_strategy = FixedDiscount(10)

# 创建环境对象并设置策略
context = DiscountContext(percentage_strategy)
print(context.calculate_discount(100))  # 输出 90

# 更改策略
context.set_strategy(fixed_strategy)
print(context.calculate_discount(100))  # 输出 90

扩展阅读

更多关于设计模式的介绍,可以参考本站的设计模式教程

[center]Strategy Pattern Diagram