策略模式是一种行为设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。
策略模式结构
在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]