HeadFirst 设计模式 8模板方法模式

模板方法模式:

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



增加一个hook()方法后


注意:

 此处的hook()(钩子)是一种被声明在抽象类中的方法,但是只有空的或默认的实现。hook()的存在可以让子类能够对算法的不同点进行挂钩。而要不要挂钩,由子类自己决定。例:


通过在子类中覆盖钩子,来使用它。此处钩子的作用是判断饮料中是否要加入调料。


设计原则:

好莱坞原则:别调用(打电话给)我们,我们会调用(打电话给)你

即:允许底层组件将自己挂钩到系统上,但是高层组件会觉得什么时候怎么样使用这些底层组件。


区别各个模式:

模板方法模式:子类决定如何实现算法中的某些步骤

策略模式:封装可互换的行为,然后使用委托来决定要采用哪一个行为

工厂方法模式:由子类觉得实例化哪个具体类


要点:

(1)“模板方法”定义了算法的步骤,并把这些步骤的实现延迟到子类。

(2)模板方法的抽象类可以定义具体方法、抽象方法和钩子。

(3)抽象方法由子类实现。

(4)钩子是一种方法,他在抽象类中不做任何事,或只做默认的事情,子类可以选择要不要覆盖它。

(5)为了防止子类改变模板方法中的算法,可以将模板方法声明为final。

(6)好莱坞原则:将决策权放在高层模块中,以便决定何时、如何调用底层模块。

(7)策略模式和模板方法都封装算法,但是前者用组合,后者用继承。

(8)工厂方法是模板方法的一种特殊版本。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值