一、概述
1、定义
Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.(定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法结构即可重定义该算法的某些特定步骤。)
2、通用类图
![](https://i-blog.csdnimg.cn/blog_migrate/c3dd083e702f38f1d849685dddad1c48.png)
- 在一个抽象类公开定义了执行它的方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行;
- 模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤;
二、通用源码
AbstractClass:
public abstract class AbstractClass {
//基本方法
protected abstract void doSomething();
protected abstract void doAnything();
//模板方法
public void templateMethod(){
//调用基本方法,完成相关逻辑
this.doAnything();
this.doSomething();
}
}
ConcreteClass:
public class ConcreteClass extends AbstractClass{
@Override
protected void doSomething() {
//具体的业务逻辑
}
@Override
protected void doAnything() {
//具体的业务逻辑
}
}
扩展:(模板方法模式中的钩子方法)
在模板方法模式的父类中,我们可以定义一个方法,它默认不做任何事,子类可以视情况决定要不要覆盖它,这种方法称为钩子方法。钩子方法是为了控制模板方法中的基本方法是否需要执行,即根据外部条件改变模板方法的执行。
扩展后的AbstractClass:
public abstract class AbstractClass {
//基本方法
protected abstract void doSomething();
protected abstract void doAnything();
//模板方法
public void templateMethod(){
//调用基本方法,完成相关逻辑
this.doAnything();
if (isExecute()