摘要:策略模式是为了解决在做同一件事的时候,存在多种可能发生情况问题。
策略模式是为了解决在做同一件事的时候,存在多种可能发生情况问题。
什么是策略模式
什么时候使用
如何使用
优缺点是什么
使用场景一个商场中,针对不同的消费者,进行不同的消费打折促销,普通消费者打9.8折,VIP用户打8折,SVIP用户打7.5折,针对打折这件事,存在三种情况需要考虑,针对不同的人,使用不同的计算方式。这里就要使用策略模式去解决。
要素针对问题的一个接口
接口的多种策略实现
一个接口的调用方
使用/** * Created by 迹_Jason on 2017/6/24. * 策略模式接口 */ public interface Discount { Double discountMoney(Double total); }
/** * Created by 迹_Jason on 2017/6/24. * 普通消费者打折力度 */ public class CommonConsumerDiscount implements Discount { public Double discountMoney(Double total) { return total * 0.98; } }
/** * Created by 迹_Jason on 2017/6/24. * svip打折力度 */ public class SvipConsumerDiscount implements Discount { public Double discountMoney(Double total) { return total * 0.75; } }
/** * Created by 迹_Jason on 2017/6/24. * vip打折力度 */ public class VipConsumerDiscount implements Discount { public Double discountMoney(Double total) { return total * 0.8; } }
/** * Created by 迹_Jason on 2017/6/24. * 调用策略接口 */ public class SumMoney { Double sum(Discount consumerType) { Double total = 7 * 2 + 5.3 * 8; return consumerType.discountMoney(total); } public static void main(String[] args) { Discount consumerType = new CommonConsumerDiscount(); SumMoney sumMoney = new SumMoney(); System.out.println(sumMoney.sum(consumerType)); } }优点
程序更加灵活,拓展性更好,可读性也更好
可以替换if-else语句的使用
缺点必须知道有哪些策略类,每个策略类的功能
如果策略很多,产生的策略实现类也非常多
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70169.html
摘要:可以使用其他模式来修正这个缺陷,如工厂方法模式代理模式或享元模式。我们的策略模式只是实现了策略的管理,但是没有严格地定义适当的场景使用适当的策略,在实际项目中,一般通过工厂方法模式来实现策略类的声明。源码地址参考文献设计模式之禅 定义 Define a family of algorithms,encapsulate each one,and make them interchange...
摘要:一定义定义维基百科策略模式作爲一種軟件設計模式,指對象有某個行爲,但是在不同的場景中,該行爲有不同的實現算法。二策略模式图我们看看策略模式是有怎样设计结构的。如中创建线程池,线程池任务满时,对提交的任务做处理就使用了策略模式。以前完整的看过《大话设计模式》,虽然完整看过,也做过笔记,但现在依然很多已经很模糊。这段时间趁着离职,有时间,打算重新过一遍,该篇将介绍策略模式。一、定义定义(维基百科...
摘要:孙膑心里一万个草泥马在奔腾,差点没噎死自己滚一边去,我们这盘跟他赛马开始,策略模式上场。在设计模式之禅中的提出通过策略枚举和反射机制对策略模式进行改良,膜拜了但是要添加或淘汰策略,还是得去对枚举进行修改,也不符合开闭原则。 今天给大家说说田忌赛马的故事。如有雷同,纯属巧合!话说在战国时期,群雄割据,硝烟四起,茶余饭后还是少不了娱乐活动的,其中赛马是最火爆的。一天,孙膑看到田忌像个死鸡似...
阅读 1412·2021-09-02 19:23
阅读 1509·2021-08-11 11:19
阅读 567·2019-08-30 15:55
阅读 1595·2019-08-30 12:50
阅读 2207·2019-08-30 11:23
阅读 2146·2019-08-29 13:13
阅读 1482·2019-08-28 18:13
阅读 3329·2019-08-26 11:53