## 策略设计模式
###
定义⼀系列的算法,把它们⼀个个封装起来, 并且使它们可相互替换,比如淘宝天猫双⼗⼀,正在搞活动有打折的、有满减的、有返利的等等,这些算法只是⼀种策略,并且是随时都可能互相替换的, 我们就可以定义⼀组算法,将每个算法
都封装起来,并且使它们之间可以互换。
## 应用场景
###
⽼王计划外出旅游,选择骑⾃⾏⻋、坐汽⻋、⻜机等,每⼀种旅⾏⽅式都是⼀个策略
Java AWT中的LayoutManager,即布局管理器
**如果在⼀个系统⾥⾯有许多类,它们之间的区别仅在于它们的⾏为,那么可以使⽤策略模式**
不希望暴露复杂的、与算法有关的数据结构,那么可以使⽤策略模式来封装算法
###
## 角色
###
Context上下⽂:屏蔽⾼层模块对策略、算法的直接访问,封装可能存在的变化
###
Strategy策略⻆⾊:抽象策略⻆⾊,是对策略、算法家族的抽象,定义每个策略或算法必须具有的⽅法和属性
###
ConcreteStrategy具体策略⻆⾊:⽤于实现抽象策略中的操作,即实现具体的算法
###
![](https://img.kancloud.cn/5e/b7/5eb782ef21bcbf87590a9fcd86e49603_1642x842.png)
###
## 具体实现(云效代码study-java项目当中设计模式当中有代码案例)
###
比如需求:
⽼王⾯试进了⼤⼚,是电商项⽬的营销活动组,负责多个营销活动,有折扣、优惠券抵扣、满减等,项⽬上线后,产品经理找茬,经常新增营销活动,导致代码改动多,加班严重搞的⽼王很恼⽕。
他发现这些都是活动策略,商品的价格是根据不同的活动策略进⾏计算的,因此⽤策略设计模式进⾏了优化,后续新增策略后只要简单配置就⾏了,不⽤⼤动⼲⼽
###
![](https://img.kancloud.cn/e4/b9/e4b9665667484d51b02f845777859cfb_1669x943.png)
###
![](https://img.kancloud.cn/1a/91/1a910724b5e88a9084778b50bbb75065_1827x946.png)
###
![](https://img.kancloud.cn/43/78/43782783b3c0b7926a38254e69427fe1_1073x915.png)
###
![](https://img.kancloud.cn/72/52/7252dbdbc397f663f7c7559fd08646cc_1493x944.png)
###
- 设计模式六大原则
- 常见的三大设计模式分类
- 创建型模式之单例模式
- 单例模式之懒汉
- 单例模式之饿汉
- 单例模式之如何选择懒汉饿汉
- 什么情况下使用单例模式
- 创建型模式之工厂模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 创建型模式之原型模式
- 创建型模式之建造者模式
- 结构型模式之适配器模式
- 接口的适配器模式
- 类的适配器模式
- 结构型模式之桥接模式
- 结构型模式之桥接模式和适配器模式的区别
- 结构型模式之装饰器模式
- 结构型模式之代理模式
- 结构模式之外观模式
- 结构模式之享元模式
- 行为模式之策略模式
- 行为模式之模板模式
- 行为模式之观察者模式
- 行为模式之责任链模式
- 行为模式之命令模式
- 行为模式之迭代器模式
- 行为模式之备忘录模式
- 行为模式之状态模式