模板方法模式----深入浅出(二)

来源:互联网 发布:comicrack是什么软件 编辑:程序博客网 时间:2024/06/15 05:39

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

 

模板方法模式----深入浅出(一)

目录

1、概述

2、结构与分析

3、拓展

4、模式总结

 

3、拓展        

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

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

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

         先看类图:

 


 

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

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


 

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



 

客户端代码如下:



 

4、模式总结     

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

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

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

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


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

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


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 喉咙痒老是有痰怎么办 抽烟多了嗓子疼怎么办 抽烟多了老咳嗽怎么办 抽烟抽多了咳嗽怎么办 嗓子咳出异物臭怎么办 鼻子有鼻涕喉咙有痰怎么办 怀孕39周感冒了怎么办 一口痰卡在喉咙怎么办 鼻塞黄鼻涕黄痰怎么办 小孩咳嗽流黄鼻涕怎么办 小孩鼻塞怎么办最简单方法 有黄鼻涕黄痰怎么办 咳嗽有泡沫白痰怎么办 痰多咳嗽老不好怎么办 5岁儿童咳嗽有痰怎么办 感冒后一直有痰怎么办 感冒吐绿色的痰怎么办 孕妇咳嗽有痰怎么办啊 没结婚的人死了怎么办 金花鼠尾巴断了怎么办 辞职交了不批怎么办 离职了又想回去怎么办 想辞职领导不批怎么办 急辞职领导不批怎么办 她生气不理我了怎么办 分手了之前的钱怎么办 结婚后老公变了怎么办 我不小心出轨了怎么办 微博账号被锁定怎么办 微博被盗号了怎么办 如果微博被盗了怎么办 老公炒股亏光了怎么办 新id密码不匹配怎么办 手机不识别sd卡怎么办 小米手环容易掉怎么办 小米4gps信号弱怎么办 小米4内存不够用怎么办 地暖放气阀漏水怎么办 暖气排气阀堵了怎么办 跳绳一只脚腕疼怎么办 牙齿不能吃冷的怎么办