模板方法模式是类的行为模式,准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的意思。
结构:
模板方法模式中,抽象类负责定义整个的逻辑框架,而具体的逻辑步骤由具体的子类实现。具体的逻辑步骤称作基本方法(primitive method),将基本方法汇总的方法称为模板方法(template method)
模板方法是顶级的行为定义,即该抽象类可以作什么功能是由模板方法定义的,但是其中的细节则是由其子类中的基本方法实现的。
用一句谚语表示就是:条条大路通罗马
静态结构图:
抽象模板(Abstract Template)角色:
定义了一个或多个抽象操作,以便让子类实现,这些抽象操作称为基本方法,他们是顶级逻辑的组成步骤。
定义并实现了一个模板方法,模板方法一般是一个具体实现,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟子类的实现,顶级逻辑也可能调用一些具体的方法。(不建议这样)
具体模板(Concrete Template)角色:
实现父类定义的一个或多个抽象方法,这些实现方法是顶级逻辑的组成步骤。
一个抽象模板可以有多个具体模板对其实现,且其实现的细节均可不同。
代码:
抽象模板角色类:
public abstract class AbstractTemplate { /** * 模板方法 */ public void templateMethod(){ //调用基本方法 abstractMethod(); hookMethod(); concreteMethod(); } /** * 基本方法的声明(由子类实现) */ protected abstract void abstractMethod(); /** * 基本方法(空方法) */ protected void hookMethod(){} /** * 基本方法(已经实现) */ private final void concreteMethod(){ //业务相关的代码 } }