Python设计模式:行为型策略模式详解
本文深入解析Python中的行为型设计模式——策略模式。通过定义一系列可互换的算法并封装在策略类中,实现运行时动态切换行为。文章详细阐述了该模式在消除复杂条件语句、提高代码复用性方面的优势,以及客户端需了解具体策略的局限性,并结合折扣计算场景与Python代码示例,展示Context、Strategy及Concrete Strategy的角色协作。
一、策略模式
在策略模式中,核心思想是将一组不同的算法分别封装起来,使它们可以相互替换。这使得一个类的行为可以在其对象实例化后的运行阶段被动态修改,从而提升了系统的灵活性。
优点:
- 定义了一系列可重用的算法和行为。
- 消除了一些条件语句。
- 可以提供相同行为的不同实现。
缺点:
Client必须了解不同的策略行为细节。
二、应用场景
根据不同的客户属性,采用不同的折扣策略来计算订单中的商品价格:
- 有 1000 或以上积分的客户,每个订单享 5% 折扣。
- 同一订单中,单个商品的数量达到 20 个或以上,享 10% 折扣。
- 订单中的不同商品达到 10 个或以上,享 7% 折扣。
三、代码示例

实体角色:
- 上下文(Context):集成了算法的类。
- 抽象策略(Strategy):实现不同算法的组件的共同接口。
- 具体策略(Concrete Strategy):抽象策略的具体子类。
import abc
# 抽象策略
class Strategy(metaclass=abc.ABCMeta):
@abc.abstractmethod
def execute(self, data):
pass
# 具体策略 1
class Strategy1(Strategy):
def execute(self, data):
print(f"使用策略1执行{data}")
# 具体策略2
class Strategy2(Strategy):
def execute(self, data):
print(f"使用策略2执行{data}")
# 上下文
class Context:
def __init__(self, data):
self.strategy = None
self.data = data
def set_strategy(self, strategy):
self.strategy = strategy
def do_strategy(self):
if self.strategy:
self.strategy.execute(self.data)
else:
print("请先配置策略!")
if __name__ == "__main__":
data = "测试数据"
s1 = Strategy1()
s2 = Strategy2()
context = Context(data)
context.set_strategy(s1)
context.do_strategy()
context.set_strategy(s2)
context.do_strategy()到此这篇关于Python设计模式中的行为型策略模式的文章就介绍到这了,更多相关Python策略模式内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













