案例分析:重构“策略”模式
经典的“策略”模式
图中的UML类图指出了“策略”模式对类的编排。
1 | # classic_strategy.py |
每个具体策略都是一个类,而且都只定义了一个方法,即discount。此外,策略实例没有状态(没有实例属性)。你可能会说,它们看起来像是普通的函数。以下示例是对以上示例的重构,把具体策略换成了简单的函数,而且去掉了Promo抽象类。
Order 类和使用函数实现的折扣策略
1 | # strategy.py |
best_promo 函数计算所有折扣, 并返回额度最大的
1 | # strategy_best.py |
找出模块中的全部策略
1 | # strategy_best2.py |