目录
what什么是模板方法
Gof定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
why为什么需要模板方法
一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体的行为。通过使用抽象操作定义的一个算法中的一些步骤,模板方法确定了它们的先后顺序,但它允许子类改变这些步骤的具体行为以满足它们各自的需求。
how如何实现模板方法
抽象模板类,负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。这些方法的定义如下。
1)抽象类/抽象模板(Abstract Class)
① 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。
② 基本方法:是整个算法中的一个步骤,包含以下几种类型。
- 抽象方法:在抽象类中声明,由具体子类实现。
- 具体方法:在抽象类中已经实现,在具体子类中可以继承或重写它。
- 钩子方法:在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。
2)具体子类/具体实现(Concrete Class)
具体实现类,实现抽象类中所定义的抽象方法和钩子方法,它们是一个顶级逻辑的一个组成步骤。
模板方法模式的结构图如图 1 所示。
开源框架经典案例
JDK中的模板方法
jdk的集合类是日常工作中最常用的工具类了,而集合类里面就大量使用了模板方法,在父类中定义模板,在子类中实现,常见的有JUC框架里面的AQS(AbstractQueuedSynchroni