策略模式通常用于解决以下问题:
多个类或函数的算法或行为类似,但又有一些细微的差别,使得不能将它们合并为一个类或函数。
需要在运行时动态地选择算法或行为,而不是在编译时就确定下来。
需要在不同的上下文中使用不同的算法或行为,而不是将它们硬编码在一个函数或类中。
以下是一个简单的策略模式示例代码:
class ShippingCost:
def __init__(self, strategy):
self._strategy = strategy
def shipping_cost(self, order):
return self._strategy.calculate(order)
class ShippingCostStrategy:
def calculate(self, order):
raise NotImplementedError
class FlatRateStrategy(ShippingCostStrategy):
def calculate(self, order):
return 5.00
class PerItemStrategy(ShippingCostStrategy):
def calculate(self, order):
return 2.00 * order.item_count()
class FreeShippingStrategy(ShippingCostStrategy):
def calculate(self, order):
return 0.00 if order.total_cost() > 100.00 else 10.00