登陆注册
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的发展历程、CPU主频、内存的组成、内存的主要性能参数等。
  • 如何操作电脑

    如何操作电脑

    信息社会是科技、文化发展,知识爆炸的结果。不懂得计算机,将处于半文盲的境地。因此,对于计算机,不仅要作为工具使用,已经是一项文化普及的要求。我们不仅要会使用计算机做一些诸如文字处理等具体工作,更要培养一种计算机意识。
  • 纵横于天地之间——互联网络技术

    纵横于天地之间——互联网络技术

    本书告诉你:不管你是谁,只要生活在当前的时代,你一定知道电话,知道电脑,知道上网……知道许许多多关于电子、关于计算机、关于网络的话题,这就是网络时代。网络的话题可多了:它是怎么来的?什么是“蜘蛛网”?网络的过去和现在,上网的方法,如何使用网络,互联网的安全,网络有“陷阱”吗?网络有“瘾”吗?网络文化和未来又是怎样的?到书中去找答案吧!
  • 《Internet实用技术》作业集

    《Internet实用技术》作业集

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

    大话设计模式

    本书主要采用JAVA语言介绍设计模式中比较常见的23种设计模式,分29章具体介绍,以现实生活中常见的事情为例来具体分析讲解。
热门推荐
  • 我的厂花男友

    我的厂花男友

    被太监喜欢算是好事还是坏事?对高暧来说,答案是肯定的。有个公主封号,荣华富贵却半点没享受到,每天伴着青灯古佛,过的是带发修行的尼姑日子,从来都是猪不叼狗不啃的她能被人喜欢,简直太好了!再看他长身而立,俊美无俦,对自己又是那般无微不至,还奢求什么呢?
  • 余老大

    余老大

    余老大,姓余,余家老大。没什么文化,但是善良,敦厚,淳朴,付出。
  • 帝王花开

    帝王花开

    混沌世界,阴司冤魂们的怨气冲撞天宫。银河龙太子受命下界为人君,改良社会,拯救众生。文曲星奉旨下界作见证,不畏逆流,铸就旷世名篇。本故事不是虚拟的时空,而是一段被误读了500年的历史。
  • 商门贵后

    商门贵后

    大晋唯一的世子爷被赐婚了!对方还是个小门小户的商女!一众属下怒了!一群狐朋狗友急了!争先恐后的出言献策,准备给未来世子妃一个下马威。但……他们好像发现了个不得了的事情!他们冷心冷情的世子爷为什么会一脸柔情的看着世子妃?甚至到了捧在手心怕摔了,含在口中怕化了的境地,眼睛痛的众人表示这个世界都玄幻了,世子你还记得你狂狷嚣张的样子吗?某个老婆奴世子傲娇的哼了一声,“你们就是嫉妒本世子有夫人!”众人卒。不出半年整个永州都流传一句话:有妻自远方来,世子心尖宠之。(本文背景虚构,女主不白莲花,男主有隐藏身份,属于强强联手共执盛世的绝配夫妻。)
  • 傻妃谋:逆斗双胞帝

    傻妃谋:逆斗双胞帝

    她是现代王牌杀手,却被最爱的人害死,穿越成废材傻妃,成了皇上报复的目标,人人唾弃的傻女。好吧!废材就废材,傻女就傻女,你丫双胞皇上玩弄历史让人真假不分,演绎着一场弥天大谎。咱就生个双胞皇子戏弄双胞皇上,让你丫也真假不识目瞪口呆。--情节虚构,请勿模仿
  • 世迁瓶

    世迁瓶

    你说:世事迁移,瓶装天下。我说:世迁瓶,世间平;和气成风,平来喜生!这部小说是我2005年之作,当时写此书时,很多词汇还没有被社会妖魔化,如“木耳”。我是男生,但是这部书我却采用女性主角,当时原因为何?我现在也想不起来,也许是因为觉得女生更干净一些吧。
  • 穿行宋末

    穿行宋末

    杜昱穿越到了疑似水浒世界的宋末,并得到了能穿越两界的时空门。一开始他只想做个倒爷发财,随着金钱和地位的变化杜昱的心也逐渐膨胀起来……
  • 大当家快跑

    大当家快跑

    你遇见过什么难受的事?跳广场舞抢不到C位?斗地主3456没有7?有一件事你一定没有遇到过,刚穿越就被追杀……
  • 月临聊斋

    月临聊斋

    牡丹花下死,做鬼也风流。岳烨魂穿成为诗书望族的大少爷,本想依红偎翠尽得风流。谁知前身与他的想法不谋而合。魂断画舫红榻之上。大夫言:岳公子,你需清心寡欲,静心休养,不可再入此前一般肆意妄为。否则,恐无法不能人道,再续香火。大夫私底下对岳父恒道:无药自愈一是宿慧觉醒,二是天财地宝,三是妖邪鬼魅。岳父恒:宿慧?从来流传于山野杂书,天财地宝,岳府没有这命。烨儿无端自愈,如此看来非妖即怪。岳烨:我这是什么地狱开局啊?
  • 潇洒征天下

    潇洒征天下

    夜影只是一个二十一世纪金牌杀手,肿么会也踩着潮流的尾巴,一不小心穿越了呢?你说穿越就穿越吧,丫的偏偏还是跟其他同仁们不一样,人家都是穿到一个十几岁的废柴小姐身上,夜影却穿到了一个胎儿身上,出生后似乎还很受宠。天知道夜影只想主宰世界而已,老天你偏偏让那么多身份特殊的人缠着她。虽然这个世界有玄气和魔法对夜影征服天下有一定的帮助,但老天你也不能这样耍她吧!