《Head First 设计模式》笔记8 模板方法模式

在这里插入图片描述

模板方法带来的一些好处
在这里插入图片描述
上图中的几个好处持怀疑态度。首先代码复用是最无所谓的一件事,我到目前认为纯粹为了复用而使用模板方法是一件很愚蠢的事。
这个模板方法的一个麻烦之处在于,如果茶和咖啡在boilWater()或pourInCup()两个方法上出现了分歧,即代码不再一模一样,那么茶和咖啡就需要重新在子类各自实现自己的方法。

模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

问题:为什么“算法的结构”就必须不变呢?什么情况下,让“算法的结构”不变会省大事?

模板方法模式类图
在这里插入图片描述

一个模板抽象类的示例代码
在这里插入图片描述
其中最后一个方法 hook() 是一个 钩子

钩子用法1:钩子控制是否执行某部分算法。
钩子函数作为控制条件,影响抽象类中的算法流程。
在这里插入图片描述
在这里插入图片描述

钩子的另一个用法是让子类能够有机会对模板方法中某些即将发生的(或刚刚发生的)步骤做出反应。(没懂)

好莱坞原则:别调用(打电话给)我们,我们会调用(打电话给)你。
就是说底层组件绝对不要直接调用高层组件,只让高层依赖底层,不要双向依赖。
:这里的高层似乎指的是抽象层次的高层。
在这里插入图片描述
在这里插入图片描述
:由第二个问答可以看出,就算是底层组件在自己的实现里调用了从高层组件继承而来的方法,也算是底层在依赖高层组件!(想想这样应该确实算是依赖)

模板方法实例:Java数组类的排序
在这里插入图片描述

又一个例子:JFrame中的“钩子”
paint()方法作为JFrame类中的一个钩子方法,它可以让子类自行选择是否要在paint()中进行绘图操作,让绘图操作变成了一个子类可选择的选项。
在这里插入图片描述

再一个例子:Applet中的钩子
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值