策略模式
应用场景
自己写后端代码的时候比如促销活动有优惠券的话点击购买有优惠,会员等级的不同付费也不同,这样就可以使用一个接口使用策略模式实现不同折扣下金额的计算,方便管理,方便扩展
定义
策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
通俗的讲,也就是将那些使用的方法分别封装成独立的类,然后将这一类使用接口统一管理起来,让需要使用这些方法的用户能够随时调用他们。
策略模式的结构

应用场景
如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
一个系统需要动态地在几种算法中选择一种。
策略模式的优点
算法可以自由切换
改一下策略很方便
扩展性良好
增加一个策略,就多增加一个类就好了。
策略模式的缺点
策略类的数量增多
- 每一个策略都是一个类,复用的可能性很小、类数量增多
所有的策略类都需要对外暴露
- 上层模块必须知道有哪些策略,然后才能决定使用哪一个策略
商场活动的策略模式应用场景
1 | #!/usr/bin/env python |
这几个类的设计如下图:
使用一个策略类CashSuper定义需要的算法的公共接口,定义三个具体策略类:CashNormal,CashRebate,CashReturn,继承于CashSuper,定义一个上下文管理类,接收一个策略,并根据该策略得出结论,当需要更改策略时,只需要在实例的时候传入不同的策略就可以,免去了修改类的麻烦