目录
一、重构策略模式
经典策略模式

策略模式的定义是:定义 一系列算法(策略),把它们一一封装起来,并且使它们可以相互替换。策略模式使得算法可以独立于使用它的客户而变换,即不同的客户都可以使用某个算法或其它算法。
下面是一个电商领域使用策略模式的例子。

策略模式设计的内容如下:
上下文:即上图中的order,用于把一些计算委托给可互换的不同算法,根据不同算法计算折扣,即用于选择具体策略。
策略:实现不同算法组件的共同接口。即上图中名为Promotion的抽象类。
具体策略:策略的具体子类。fidelityProme、BulkPromo和LargeOrderPromo即这里实现的三个具体策略。
具体策略由上下文类的客户选择,实例化订单之前,系统以某种方式确定选择哪一种策略,然后用这种选择来初始化Order。具体选择哪一种策略,不在当前设计模式的职责范围内。
from abc import ABC, abstractmethod
from collections import namedtuple
Customer = namedtuple('Customer', 'name fidelity') # 姓名和积分
class LineItem:
def __init__(self, product, quantity, price):
self.product = product
self.quantity = quantity
self.price = price
def total(self) -> '总价格 = 单价 * 数量':
return self.price * self.quantity
class Order: # 上下文
def __init__(self, customer, cart : '购买的所有商品种类', promotion : '用于选择策略, 实参类型就是三个具体策略对象'=None):
self.customer = customer
self.cart = list(cart)
self.promotion = promotion
def total(self):
if not hasattr(self, '__total'):
self.__total = sum(item.total() for item in self.cart)
return self.__total
def due(self) -> "计

本文详细介绍了Python中的两种设计模式——策略模式和命令模式。策略模式通过封装一系列算法,允许在运行时选择合适的策略,例如在电商场景中动态选择折扣策略。而命令模式则关注于解耦调用者和接收者,使得调用操作可以灵活传递。文章通过代码示例展示了如何在实际项目中应用这两种模式,包括如何自动选择最佳策略和查找模块中的所有策略。
最低0.47元/天 解锁文章
349

被折叠的 条评论
为什么被折叠?



