设计模板模式
1. 1 模板模式的定义
定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中。
1.2 设计模式的结构
(1) 抽象类(AbstractClass):
负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。
① 模板方法:templateMethod() 定义了算法的骨架,按某种顺序调用其包含的基本方法。
② 基本方法:是整个算法中的一个步骤,包含以下几种类型。
- 抽象方法:abstractMethod(),在抽象类中申明,由具体子类实现。
- 具体方法:commonMethod(),在抽象类中已经实现,在具体子类中可以继承或重写它。
- 钩子方法:hookMethod(),在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。钩子就是给子类一个授权,让子类来决定模板方法的逻辑执行。
2. 例子
(1)去银行办理业务一般要经过以下4个流程:
取号、排队、办理具体业务、对银行工作人员进行评分等。
其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。
(2)一个人每天会起床、吃饭、做事、睡觉等,其中“做事”的内容每天可能不同。
让子类实现具体做事的内容。
(3)西游记里面菩萨定好的 81 难,这就是一个顶层的逻辑骨架。
(4)spring 中对 Hibernate 的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。