码迷,mamicode.com
首页 > 其他好文 > 详细

模板方法模式----你该找对象了(二)

时间:2015-08-30 15:51:35      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

上一篇小编叙述 模仿方法模式 

模板方法模式----你该找对象了(一)

目录

1、概述

2、结构与分析

3、拓展

4、模式总结

 

3、拓展        

           钩子方法给子类留了“后门”可以通过在子类中实现的钩子方法对父类方法的执行进行约束,实现子类对父类行为的反向控制。(体现灵活性)

       上篇博客续集,情侣之间约约会,看看电影,喝喝咖啡,调情调情还是不错的。说到喝咖啡,这不来到星巴克咖啡店 ,我们要了一杯咖啡,当漂亮的服务员问你:“先生,您是否要加调料?”你是呆呆地站在那……还是站在那……还是站在那……

          为了使用钩子,我们在子类中覆盖它,在这里,钩子控制了咖啡饮料是否执行某部分算法,说得更明确些,就是饮料中是否要加进调料。

          先看类图:

 技术分享


 

       说明:咖啡因饮料为抽象类,其中封装了一系列步骤方法,第一步:水煮沸(boilWater)、第二步:泡(brew)、第三步:放入杯子(pourInCup)、第四步:加调料(addCondiments),模板方法(prepareRecipe)中封装以上的步骤。

          在类图中咱需要注意的是 钩子方法(customerWantsCondiments,在下面的代码中,钩子方法的返回值的类型是boolean型,默认返回值为true,在子类中可以根据实际情况覆盖该方法,其中用于具体子类Coffee 代码决定是否要实现父类的方法。

技术分享

 

           在具体子类CaffeeWithhook 覆盖了钩子方法 customerWantsCondiments(),返回false,表示客户无需添加任何调料。如果顾客“想要”调料,返回ture时,此时我们才调用addCodiments()方法。


技术分享

 

客户端代码如下:

技术分享

技术分享

 

4、模式总结     

     模板方法应用于下列情况:

          ? 1) 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

          ? 2)基于继承的代码复用技术

          ? 3)控制子类扩展(钩子方法)。


金无足赤,人无完人。模板模式固然很好,但也存在一些缺点:

       每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,但是更加符合“单一职责原则”,使得类的内聚性得以提高。(桥接模式相结合使用)


版权声明:本文为博主原创文章,未经博主允许不得转载。

模板方法模式----你该找对象了(二)

标签:

原文地址:http://blog.csdn.net/u010293698/article/details/48105363

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!