暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OOP设计模式Python实现--行为型模式之策略模式

稻壳编程 2020-02-16
475

作者简介

211工程院校贵州大学管理学院硕士研究生、互联网金融行业资深DevOps研发工程师. 曾在国内多家知名互联网公司 平安科技、微众银行、顺丰科技、魅族任职. 具有多年国内一线互联网公司自动化运维平台设计与开发经验。



OOP设计模式Python实现

行为型模式--策略模式

前言:

行为型模式是对在不同的对象之间划分责任和算法的抽象化;在系统运行时,对象并不是孤立的而是通过相互通信与协作完成复杂功能的,也就是一个对象在运行时也将影响到其他对象的运行。策略模式通过对多种算法封装来解决同一个问题,优势是代码在运行时能透明的切换算法,基于输入数据决定使用哪种算法。因时间、条件不同所以每个算法的实现细节是有所差异的,在需求分析过程中,当需要在不同时间应用不同的业务规则,就可以考虑使用策略模式进行处理。

 1 

策略模式代码架构图

定义类CashSuper作为算法的公共接口,定义三个具体策略类CashNormal、CashRebate、CashReturn继承自CashSuper。定义一个上下文管理类Context接受策略,应用不同的策略得出不同的结果,当需要更改策略时,只需要在实例化时传入不同的策略即可。我们通过一个生活中的例子来说明策略模式:某商场销售Lee牛仔裤,分别以原价,八折,满100减20的形式出售。

 2 

示例代码(未应用策略模式)

输出:

在以上代码中,在调用accept_money方法时通过传入不同的参数应用不同的策略,这种代码虽然也可以实现需求,但是仍有很大的优化空间。比如扩展性比较差,如果需要添加一个新的优惠策略,除了修改源代码就别无他法了,添加一个策略就要修改一次源代码,这明显违背了"开闭原则";同时这样的代码将策略的选择与策略的实现耦合在了一起,使得类的职责不清晰,违背了"单一职责原则"。

 3 

示例代码(策略模式)

输出:

 4 

结束语

如果本文可以对您的工作学习带来帮助,请扫描左侧赞赏码以资鼓励作者;文章勘误请扫描右侧二维码联系作者。


文章转载自稻壳编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论