设计模式之模板方法模式!

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。

  • Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。

  • 它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。

简单来说,有多个子类共有的方法,且逻辑相同,可以考虑作为模板方法。

模板模式的关键是:

  • 子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑。

UML类图:

img

抽象模板角色类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public abstract class AbstractTemplate {
/**
* 模板方法
*/
public void templateMethod(){
//调用基本方法
abstractMethod();
hookMethod();
concreteMethod();
}
/**
* 基本方法的声明(由子类实现)
*/
protected abstract void abstractMethod();
/**
* 基本方法(空方法)
*/
protected void hookMethod(){}
/**
* 基本方法(已经实现)
*/
private final void concreteMethod(){
//业务相关的代码
}
}

具体模板角色类:

1
2
3
4
5
6
7
8
9
10
11
12
public class ConcreteTemplate extends AbstractTemplate{
//基本方法的实现
@Override
public void abstractMethod() {
//业务相关的代码
}
//重写父类的方法
@Override
public void hookMethod() {
//业务相关的代码
}
}