1.什么是策略模式。
策略模式是将可变部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现。使得客户端程序独立于算法的改变,而不会出现变动。体现了高内聚和低耦合的特性。
缺点:客户端必须知道和理解所有的策咯,违反最少知识原则的,可以利用享元模式减少对象的数量。
特点:把不变的部分抽象为接口,将变化的部分归结为实现。
2.策略模式应用场景举例。
文档——布局算法——(布局算法1,布局算法2,布局算法3,……)
支付——支付算法——(招商银行,建设银行,工商银行,……)
旅游——交通工具——(汽车,火车,飞机,轮船,……)
……
3.策略模式的使用举例。
三国有一章,周郎妙计安天下,赔了夫人又折兵。这里讲述了,赵云怀揣着诸葛亮的三条锦囊妙计,来到吴国,最后,在诸葛亮安排下,黄忠与魏延救援下,刘备最终娶回吴国公主的故事。这里可以使用到策略模式,抽象为如下类图:
解释如下:定义一个妙计的接口类,可以用来实现各种各样的计策。定义一个存放计策的抽象锦囊类SmartExpress,用于陈放各种计策。有一个秘密的类继承自锦囊类,为赵云使用的,有一个明显计谋类,继承自锦囊类,为黄忠与魏延等使用。
核心代码:
IIdearStrategy接口:
/** * @FileName IIdearStrategy.java * @Package com.ali.pattern.strategy.idears * @Description * <p>策略模式:各种策略的抽象接口</p> * @Author ali blog:http://www.cnblogs.com/accipiter * @Date 2016年1月18日下午8:29:56 * @Version V1.0.1 */ package com.ali.pattern.strategy.idears; /** * @ClassName IIdearStrategy * @Description TODO * @Date 下午8:32:05 */ public interface IIdearStrategy{ public void oprate(); }
SmartExpress 类:
/** * @FileName SmartExpress.java * @Package com.ali.pattern.strategy.idears * @Description *<p>周郎妙计安天下,赔了夫人又折兵</p> * @Author ali blog:http://www.cnblogs.com/accipiter * @Date 2016年1月18日下午8:49:01 * @Version V1.0.1 */ package com.ali.pattern.strategy.idears; /** * @ClassName SmartExpress * @Description * <p>锦囊类用以装妙计</p> * @Date 下午8:49:01 */ public abstract class SmartExpress { private IIdearStrategy idearStrategy; /** * @Title SmartExpress * @Description * <p>构造函数用以决定使用那个妙计</p> * @param idearStrategy */ public void setSmartExpress(IIdearStrategy idearStrategy){ this.idearStrategy=idearStrategy; } /** * @Title operate * @Description * <p>使用计谋</p> * @Return void * @Throws * @user Administrator * @Date 2016年1月18日 */ public void operate(){ this.idearStrategy.oprate(); } }
=============================华丽分割线=======================================
如果有需要全套代码的可以与我联系。
原文:http://www.cnblogs.com/accipiter/p/5140760.html