Python设计模式中的行为型策略模式
更新时间:2022年02月15日 09:58:42 作者:范桂飓
这篇文章主要介绍了Python设计模式中的行为型策略模式,策略模式即Strategy Pattern,其定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户,下文相关资料具有一点的参考价值,需要的小伙伴可以参考一下
一、策略模式
策略模式中,首先定义了一系列不同的算法,并把它们一一封装起来,然后在策略类中,使这些算法可以相互替换。这意味着,让一个类的行为(算法)可以在类的实例化对象运行时进行更改。
优点:
- 定义了一系列可重用的算法和行为。
- 消除了一些条件语句。
- 可以提供相同行为的不同实现。
缺点:
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策略模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
pyecharts绘制时间轮播图柱形图+饼图+玫瑰图+折线图
这篇文章主要介绍了pyecharts绘制时间轮播图柱形图+饼图+玫瑰图+折线图,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下2022-06-06用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
下面小编就为大家分享一篇用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例,具有很好的参考价值,希望对大家有所帮助。一起跟随想过来看看吧2017-12-12打包FlaskAdmin程序时关于static路径问题的解决
近期写了个基于Flask-admin的数据库管理程序,通过pyinstaller打包,给别人用,经过几次尝试,打包的数据一直找不到static里面的样式文件,查阅资料后,最总把问题搞定了。写下处理流程,供后来人参考2021-09-09
最新评论