您的位置:首页 > 其它

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

2015-08-30 15:39 169 查看
上一篇小编叙述模仿方法模式




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



目录
1、概述
2、结构与分析
3、拓展
4、模式总结

3、拓展

钩子方法给子类留了“后门”可以通过在子类中实现的钩子方法对父类方法的执行进行约束,实现子类对父类行为的反向控制。(体现灵活性)
上篇博客续集,情侣之间约约会,看看电影,喝喝咖啡,调情调情还是不错的。说到喝咖啡,这不来到星巴克咖啡店,我们要了一杯咖啡,当漂亮的服务员问你:“先生,您是否要加调料?”你是呆呆地站在那……还是站在那……还是站在那……
为了使用钩子,我们在子类中覆盖它,在这里,钩子控制了咖啡饮料是否执行某部分算法,说得更明确些,就是饮料中是否要加进调料。
先看类图:




说明:咖啡因饮料为抽象类,其中封装了一系列步骤方法,第一步:水煮沸(boilWater)、第二步:泡(brew)、第三步:放入杯子(pourInCup)、第四步:加调料(addCondiments),模板方法(prepareRecipe)中封装以上的步骤。
在类图中咱需要注意的是钩子方法(customerWantsCondiments),在下面的代码中,钩子方法的返回值的类型是boolean型,默认返回值为true,在子类中可以根据实际情况覆盖该方法,其中用于具体子类Coffee代码决定是否要实现父类的方法。




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




客户端代码如下:






4、模式总结

模板方法应用于下列情况:
1
一次性实现一个算法的
不变的部分,并将可变的行为留给子类来实现。
2)基于继承的代码复用技术
3)控制子类扩展(钩子方法)。

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

每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,但是更加符合“单一职责原则”,使得类的内聚性得以提高。(桥接模式相结合使用)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: