一、策略模式
——我一直不太信任自己的记忆力,所以我把它们都写下来
23种设计模式基本上都是在大量的实践经验中抽象出来的,虽然我们目前经验还没能达到那种程度,但是一定的时间后翻看设计模式,发现有一部分似曾相识,这不就是我常用的吗?是不是内心一阵窃喜啊。
策略模式跟模板模式确实有一点像,但是区别还是比较明显的,有必要的话看下上一篇博客设计模式-模板模式(http://zyqwst.iteye.com/admin/blogs/2285300/)。
策略模式:策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。
定义看起来比较抽象,直白来说就是把一系列不同的算法封装到具有共同接口的实现类中。调用者根据情境调用不同的实现类。下面类图中,调用者根据需求选择调用StrategyA或StratebyB。
下面看一个Demo:某商品按照顾客Customer,会员VIP,超级会员SVIP有不同的打折力度;分别是不打折、减10%,减20%。根据顾客计算相应的价格。
/** * 价格类 * @author albert * */ public class Price { /**假设商品单价为10元*/ private Double price=10.00d; /** * 按照顾客类型返回实际单价 * @param discount 打折策略 * @return */ public Double actualPrice(Discount discount){ return price*discount.getDiscount(); } } /**打折接口*/ public interface Discount { public Double getDiscount(); } /**会员打折*/ public class VipDiscount implements Discount{ public Double getDiscount(){ return 0.9d; } } /**超级会员打折*/ public class SVipDiscount implements Discount{ public Double getDiscount(){ return 0.8d; } } /**普通顾客不打折*/ public class MemberDiscount implements Discount{ public Double getDiscount(){ return 1d; } }
打折接口Discount;根据三种客户类型有三种打折实现。下面是测试类
public class Test { /** * @param args */ public static void main(String[] args) { Price price = new Price(); Double actualPrice = price.actualPrice(new VipDiscount());//假设是会员,打9折 System.out.println(actualPrice);//结果是9 } }
从例子可以得出结论:算法的选择是平等的,算法的选择完全依赖于调用者当时的情境。策略模式的侧重不是算法的实现,而是对这些算法如何组织和调用。从而让程序更加灵活,具有更好的维护性和扩展性。这也是策略模式相对于模板方法模式的一大区别。
相关推荐
设计模式-策略模式-c++版 压缩包中有build好的程序和工程设计到的所有类的源码,还有一个Uml类图
java常用设计模式-策略模式
设计模式-策略模式源代码 .net,策略模式,模式,设计模式 文件包中有UML策略模式详解图
设计模式-策略模式(Strategy)结合Android小知识讲解,简单明了
设计模式-策略模式(讲解及其实现代码)
设计模式--策略模式java例子
c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...
设计模式--策略模式StrategyPattern
设计模式---策略者模式---根据《Head First 设计模式》自己实现
JAVA-设计模式-行为型模式-策略模式
NULL 博文链接:https://xieye.iteye.com/blog/1070202
Java设计模式,策略模式的Demo,具体的思想与实现有很多讲得很好的老师,我是看厉风行老师的视频学的,讲得不错,简单易懂
在策略模式(Strategy Pattern)中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
java设计模式--策略模式 HeadFirst书中的 装饰者模式
策略模式思想简单实现,初学者可看看。 设计模式 策略模式 Strategy
这是最为经典的东南大学出版社的《深入浅出设计模式》的第一章策略模式的ios软件实现! 陆续我还会将其余章源代码与大家分享。
1.当你有很多类似的类,但它们执行某些行为的方式不同时,请使用此 2.使用该模式将类的业务逻辑与算法的实现细节隔离开来,这些算法在 3.当你的类具有大量的条件运