作者简介

211工程院校贵州大学管理学院硕士研究生、互联网金融行业资深DevOps研发工程师. 曾在国内多家知名互联网公司 平安科技、微众银行、顺丰科技、魅族任职. 具有多年国内一线互联网公司自动化运维平台设计与开发经验。
OOP设计模式Python实现
行为型模式--策略模式
前言:
行为型模式是对在不同的对象之间划分责任和算法的抽象化;在系统运行时,对象并不是孤立的而是通过相互通信与协作完成复杂功能的,也就是一个对象在运行时也将影响到其他对象的运行。策略模式通过对多种算法封装来解决同一个问题,优势是代码在运行时能透明的切换算法,基于输入数据决定使用哪种算法。因时间、条件不同所以每个算法的实现细节是有所差异的,在需求分析过程中,当需要在不同时间应用不同的业务规则,就可以考虑使用策略模式进行处理。

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

输出:

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


输出:

4
结束语






