登陆注册
8183300000158

第158章 10 模板方法模式与策略模式

小A:“模板方法模式与策略模式有什么不同?”

大B:“模板方法模式与策略模式的作用相常类似。有时可以用策略模式替代模板方法模式。模板方法模式通过继承来实现代码复用,策略模式使用委托,委托比继承具有更大的灵活性。继承经常被错误的使用。策略模式把不确定的行为集中到一个接口中,并在主类委托这个接口。”

思考刚才的订单处理例子,改为策略模式后。

1、把不确定的行为抽取为一个接口。

代码:

Public interface OrderHelper{

public int getOrderItemPrice(OrderItem orderItem);

public int getSpendingLimit(int customerId);

public int saveOrder(int customerId,int total,List orderItemList);

}

rendercode();

2、而把这个具体类调用这个接口的相应方法来实现具体的逻辑。

代码:

public class Order{

private OrderHelper orderHelpr;

public void setOrderHelper(OrderHelper orderHelper){

this。orderHelper=orderHelper;

}

public Order placeOrder(int customerId,List orderItemList){

int total=0;

for(int i=0;iorderHelpr。getSpendingLimit(customerId)){

throw new BusinessException(“超出信用额度” orderHelpr。getSpendingLimit(customerId));

}

int orderId=orderHelpr。saveOrder(customerId,total,orderItemList);

return new OrderImpl(orderId,total);

}

}

rendercode();

大B:“这样Order类不再是一个抽象类,而是一个具体类。Order类委托OrderHelpher接口来完成placeOrder方法所需的基本操作。像在这种情况下使用策略模式更具有优势,策略模式不需要继承来实现。而是通过一个委托对象来实现。OrderHelper接口无需要去继续任何指定的类。而相对来说,采用策略来实现会更复杂一些。由此可见,模板方法模式主要应用于框架设计中,以确保基类控制处理流程的逻辑顺序(如框架的初始化)。像上面的测试基类中。框架通常需要控制反转。而在一些情况中,优级先考虑使用策略模式:当需要变化的操作非常多时,采用策略模式把这些操作抽取到一个接口。当那些基本操作的实现需要与其它类相关时,应该使用策略模式。通过委托接口把行为与实现完全分离出来(比如数据存取)。比如订单处理的saveOrder方法,是写入数据库的。它的实现与采用何种持久化模式相关。当某些基本操作的实现可能需要在运行时改变时,可以通过在运行时改变委托对象来实现,而继承则不能。所以才采用策略模式。”

同类推荐
  • 如何选购电脑

    如何选购电脑

    本书以问答的形式介绍了选购电脑的基本知识。内容包括:电脑的组成、选购电脑的技巧、主机的部件构成、主板的主要类型、CPU的性能指标等。
  • 信息安全

    信息安全

    我们不得不看到,全球信息化发展,使信息安全成为维护国家安全的重要屏障,信息安全问题正在为国与国之间带来新的制约关系。当然,这只是我们强调信息安全极端重要性的一个原因。事实上,信息安全已经上升为国家安全的重要组成部分,这是信息时代国家安全的明显特征,也是很多国家的共识。但与其他国家安全元素不同,如果脱离信息化发展的环境,“信息安全”只是一个抽象的目标,它要通过对国家的政治、经济、文化等方面的影响体现其对国家安全的意义,并以保障信息化发展为目标取向。因此,我们说信息安全是信息时代国家安全的基石。
  • 智能计算方法概论

    智能计算方法概论

    本书以智能计算领域的若干前沿技术为主线,内容包括数字水印技术在版权保护区和身份认证中的应用,量子算法在信号处理、图像处理中的应用,量子数据挖掘技术,小波方法在医学图像处理中的应用等。
  • 《Internet实用技术》作业集

    《Internet实用技术》作业集

    随着计算机应用的普及和社会信息化水平的提高,Internet已走进我们的生活。《Internet实用技术》这门课将带领我们走进网络的神秘殿堂,让我们认识网络,了解网络,进而学会使用网络,维护网络。其范围涵盖了在授课过程中所讲授的内容,题型多样,内容丰富,并附有两套模拟题,最后附有答案。学生可按照课程进度做习题来巩固和掌握知识。本作业集由李琳编写,由西北工业大学网络教育学院负责组稿和审定。因为时间仓促,水平有限,错误和不当之处在所难免,敬请读者批评指正。
热门推荐
  • 苍龙擎天记

    苍龙擎天记

    默默无名,奈何机缘巧合踏上修炼之路,寻父踪,远走他方。在这个世界上,只有强者才能生存;在这个世界上,只有强者才能保护自己心爱的人。不求宏图霸业,只求强大无人敢欺。灵动天下,实力为王。看我苍龙化身,擎起这碧海青天。望众书友大力支持,绝不太监。新书前期求收藏推荐,小手一抖,经验到手。沐流觞在这里谢过众位!
  • 月儿弯弯一是艳阳天

    月儿弯弯一是艳阳天

    华烨生在富贵之家,万千宠爱,一朝被害,家破人亡,孤身一人逃出去,看过世间丑态,尝过人情冷暖,九年后回归,如何复起?以华烨为起点,延伸至一个青春的故事,其中人物各有特色,各有不同……谁的青春不迷茫,谁的青春不精彩!!
  • 文娱大咖

    文娱大咖

    文娱至上,独领世界巅峰潮流。改变世界,引爆全球。娱乐人生,才是完美。
  • 谒先主庙

    谒先主庙

    本书为公版书,为不受著作权法限制的作家、艺术家及其它人士发布的作品,供广大读者阅读交流。
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 心量越大,好事越多

    心量越大,好事越多

    宽广的心量除了跟与生俱来的气质有关系外,还需要靠后天的觉悟和修行来逐步拓宽。星云大师在本书中具体而微地刻划出人间万象与众生实相,深入浅出的探讨世间的问题与人生的哲理,从生活、工作、艺术等各个层面,分享了修身养性方面的智慧。以宽己之心容人,心量越大,福报越大。我们的心量有多大,就能够完成多大的事业;如果我们能够包容一家,就能够做一家之主;能够包容一市,就可以做一市之长;能够包容一国,就可以做一国之君;能泯除一切对待,包容整个法界,就可以随缘应现,逍遥自在,成为法界之王。
  • 我与神仙混在一起的日子

    我与神仙混在一起的日子

    丁松怎么也没想到,只是点击了一个奇怪的抽奖系统,竟然就中了大奖。可这所谓的中大奖,就是让自己当保姆,照顾几个神仙的预备役?这也能叫大奖?这也能称之为惊喜?“你给我解释解释,什么他喵的叫他喵的惊喜?”丁松揪着对方的衣领,悲愤的喊道。“我也没想到第一次有人玩就中了。”对方擦擦汗,小心翼翼的说道:“要不然,再给你点好处?”“什么好处?”丁松谨慎的问道。“再给你送俩过来!美女神仙!你干嘛?别拿,那是轩辕剑,那是盘古斧,别过来,别,啊!”
  • 万源之祖

    万源之祖

    且看少年如何在异界天骄中崭露头角终成万源之祖
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 百变娇妻君来追我

    百变娇妻君来追我

    血玲珑,杀手界的王,朋友爱人的联合谋杀。一朝穿越,成为神秘的阁主。讨债!杀人!收心!玩乐!活的自由自在,可谁来告诉她,这个冷冰块儿美男子,为啥就这么死皮赖脸的跟着她?月老,你个小老儿,给你姑奶奶安排的啥姻缘啊?不过呢,这个美男冷是冷,还挺养眼的。姑奶奶我就大发慈悲,收了你吧,不要太感谢我哦!