策略模式是平常我们应用最广泛的但是又没有总结的一个模式,spring加载类就是典型的策略模式,还有我们的代码分层,也就策略模式的实现
一、策略模式的定义:
策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
二、涉及的角色:
1.抽象策略角色:
将需要使用的算法或者业务抽象为接口
2.具体策略角色:
具体的算法与业务实现
3.策略使用者:
定义具体使用哪一种策略,策略的调用者
三、使用场景
1.有相同的逻辑,只是具体的实现和行为上有区别(同样查数据,一个查mysql,一个查oracle)
2.客户端需要动态的决定使用哪种具体算法,算法都是同一个接口的实现类(比如打折,同样打折有慢减什么的各种优惠,不同的节日使用不同的优惠)
四、策略模式的优缺点
优点:
对客户隐藏具体的策略实现细节,彼此完全独立,具体策略实现自同一个接口,他们之间可以自由切换
易于扩展,如果添加新的策略类,代码基本不用变
缺点:
策略类过多时维护不方便,客户端知道具体的策略类比较繁琐(spring优化为配置,这样就方便好多)
五、策略模式的实现
以商店销售产品打折为例,不同的节日要有不同的打折率,出售的价格也是不一样的,使用策略模式就可以很方便的添加新的打折方案,替换打折方案。
1.抽象策略角色:
2.具体策略角色
3.调用策略
4.扩展
新建十一国庆的打折方案
这边我们切换具体的方案是通过new来实现的,如果使用spring则可以直接通过修改配置文件,这样扩展更方便