模板方法模式

在含有继承结构的代码中,模板方法模式是非常常用的。

模板方法只负责定义第一步应该要做什么,第二步应该做什么,第三步应该做什么,至于怎么做,由子类来实现。

定义一个抽象类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public abstract class AbstractTemplate {
// 这就是模板方法
public void templateMethod() {
init();
apply(); // 这个是重点
end(); // 可以作为钩子方法
}

protected void init() {
System.out.println("init 抽象层已经实现,子类也可以选择覆写");
}

// 留给子类实现
protected abstract void apply();

protected void end() {
}
}

写一个实现类:

1
2
3
4
5
6
7
8
9
public class ConcreteTemplate extends AbstractTemplate {
public void apply() {
System.out.println("子类实现抽象方法 apply");
}

public void end() {
System.out.println("我们可以把 method3 当做钩子方法来使用,需要的时候覆写就可以了");
}
}

客户端调用:

1
2
3
4
5
6
7
public class Main {
public static void main(String[] args) {
AbstractTemplate t = new ConcreteTemplate();
// 调用模板方法
t.templateMethod();
}
}

参考