策略模式 Strategy 政策Policy 行为型 设计模式(二十五)

 略模式 Strategy

image_5c21cbb4_55b2
 
image_5c21cbb4_3b5
与策略相关的常见词汇有:营销策略、折扣策略、教学策略、记忆策略、学习策略....
“策略”意味着分情况讨论,而不是一概而论
面对不同年龄段的人,面对不同的商品,必然将会有不同的话术;
面对购物总价的范围,很可能会有不同的折扣方案;
面对理解能力不同的学生,必然有不同的教学策略;
 
而在我们程序的世界里,“策略”就是分情况讨论。也就是类似状态模式中的条件分支或者选择分支
只不过状态模式中是事物的不同状态,而策略模式中关注的是处理方法
比如
复制代码
if(totalPrice > 1000){ //9折else if(totalPrice > 2000){ //8折}else if(totalPrice > 3000){ //7折}
复制代码
这就是一种打折策略,对应于购物总金额的不同,采用不同的处理方法。
显然,使用条件分支或者选择语句,类似状态模式中的分析,也存在类似的问题
如果条件过多,会导致处理逻辑复杂
而且,策略的逻辑与业务逻辑耦合在一起,如果处理方法变化还需要修改业务逻辑方法,扩展性差
而且,也不适合增加新的策略方案
原文地址:image_5c21cbb4_22ad
抽象策略角色Strategy
定义了抽象的策略,比如打折,排序等
定义了策略的一致性访问接口,比如定义了一个排序接口 sort()
具体策略角色ConcreteStrategy
实现抽象策略的定义的接口,实现自己的行为算法,比如ConcreteStrategyA冒泡 ConcreteStrategyB快排
环境类Context
维护Strategy,持有一个Strategy的引用,用来管理Strategy,可以切换策略
是Strategy的使用者

代码示例

排序接口,定义了一个sort方法
复制代码
package strategy; public interface SortStrategy { void sort(); }
复制代码
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信