合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
## 策略设计模式 ### 定义⼀系列的算法,把它们⼀个个封装起来, 并且使它们可相互替换,比如淘宝天猫双⼗⼀,正在搞活动有打折的、有满减的、有返利的等等,这些算法只是⼀种策略,并且是随时都可能互相替换的, 我们就可以定义⼀组算法,将每个算法 都封装起来,并且使它们之间可以互换。 ## 应用场景 ### ⽼王计划外出旅游,选择骑⾃⾏⻋、坐汽⻋、⻜机等,每⼀种旅⾏⽅式都是⼀个策略 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) ###