它对一系列的算法加以封装 为所有算法定义一个抽象的算法接口 并通过继承该抽象算法接口 对所有的算法加以封装和实现 具体的算法选择 交由客户端决定 策略 。
二、 策略模式的角色1、环境(Context)角色 持有一个Strategy的引用。
2、抽象策略(Strategy)角色 这是一个抽象角色 通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
3、具体策略(ConcreteStrategy)角色 包装了相关的算法或行为。
三、策略模式的优缺点优点
1、代码中的if、switch判断逻辑可以去掉
2、代码优雅、可复用、可读性好、便于维护
3、策略模式遵循开闭原则 实现代码的解耦合
缺点
1、 策略如果很多的话就会出现很多策略类 会造成策略类膨胀
2、 使用者必须清楚所有的策略类及其用途
四、策略模式的实现策略模式的用意是针对一组算法 将每一个算法封装到具有共同接口的独立的类中 从而使得它们可以互相替换。
策略模式使得算法可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来。
环境类负责维持和查询行为类 各种算法则在具体策略中提供。由于算法和环境独立开来 算法的修改不会影响环境和客户端。
五、策略模式的编写步骤1.对策略对象定义一个公共接口。
2.编写策略类 该类实现了上面的公共接口。
3.在使用策略对象的类中保存一个对策略对象的引用。
4.在使用策略对象的类中 实现对策略对象的set和get方法 注入 或者使用构造方法完成赋值。
六、实列抽象折扣类
public interface MemberStrategy { * 计算原油的价格 * param crudeOilPrice 原油的原价 * return 计算出打折后的价格 double calcPrice(double crudeOilPrice);
初级会员折扣类
public class PrimaryMemberStrategyImpl implements MemberStrategy { Override public double calcPrice(double crudeOilPrice) { System.out.println( 对于初级会员的没有折扣 ); return crudeOilPrice;
中级会员折扣类
public class IntermediateMemberStrategy implements MemberStrategy { Override public double calcPrice(double crudeOilPrice) { System.out.println( 对于中级会员的折扣为10% ); return crudeOilPrice * 0.9;
高级会员折扣类
public class AdvancedMemberStrategy implements MemberStrategy { Override public double calcPrice(double crudeOilPrice) { System.out.println( 对于高级会员的折扣为20% ); return crudeOilPrice * 0.8;
贵宾会员折扣类
public class VisitantMemberStrategy implements MemberStrategy { Override public double calcPrice(double crudeOilPrice) { System.out.println( 对于贵宾会员的折扣为25% ); return crudeOilPrice * 0.75;
价格类
public class Price { //持有一个具体的策略对象 private MemberStrategy strategy; * 构造函数 传入一个具体的策略对象 * param strategy 具体的策略对象 public Price(MemberStrategy strategy){ this.strategy strategy; * 计算原油的价格 * param crudeOilPrice 原油的原价 * return 计算出打折后的价格 public double quote(double crudeOilPrice){ return this.strategy.calcPrice(crudeOilPrice);
总结 if else作为每种编程语言都不可或缺的条件语句 在编程时会大量的用到。一般建议嵌套不要超过三层 如果一段代码存在过多的if else嵌套 代码的可读性就会急速下降 后期维护难度也大大提高 可以利用策略模式来替代if/else。
如图: 目录切换到知识付费项目根目录,点击终端 打开终端后切到知识付费根目录 ...
问题描述: 近期工单有企业版客户反馈:使用腾讯会议的本地录制功能,录制的视频...
一、前言 前段时间看到一篇不错的文章《看了这篇你就会手写RPC框架了》,于是便...
服务器的流量是什么?服务器的流量其实就是站点被访问时,所进行传输消耗的数据...
客户简介 深圳市科陆电子科技股份有限公司(以下简称“科陆电子”)成立于1996年...
LoRa 是LPWAN通信技术中的一种,是美国Semtech公司采用和推广的一种基于扩频技术...
客户简介 找靓机(深圳市万事富科技有限公司旗下app)是一个原装二手数码3C的直...
共筑云网新基建·共建数转新未来。12月23日,2020年数字长三角发展论坛在江苏省...
TOP云 1 月 8 日讯,日前又一三声母 域名 “ 投融资 ”trz.com 以 72 万高价成功...
戴尔科技云平台(DTCP)-VCF on VxRail通过可信云混合云解决方案私有云评估。 Vx...