模板方法(TemplateMethod)定义一个操作中的算法的骨架, 而将一些步骤延迟到子类中, 使得子类可以不改变一个算法的结构即可重新定义算法的某些特定的步骤。
类关系
1 +--------------------+
2 | AbstractClass |
3 +-^-----------^------+
4 extends | |
5 +----+ +--+ extends
6 | |
7+--------+--------+ +-----+------------+
8| ImplClassA | | ImplClassB |
9+-----------------+ +------------------+
1public abstract class AbstractClass {
2 abstract void methodA();
3
4 abstract void methodB();
5
6 abstract void methodC();
7
8 void executeTemplateMethod() {
9 methodA();
10 methodB();
11 methodC();
12 }
13}
1public class ImplClassA extends AbstractClass {
2 @Override
3 void methodA() {
4 System.out.println("ClassA的methodA方法执行了");
5 }
6
7 @Override
8 void methodB() {
9 System.out.println("ClassA的methodB方法执行了");
10 }
11
12 @Override
13 void methodC() {
14 System.out.println("ClassA的methodA方法执行了");
15 }
16}
1public class ImplClassB extends AbstractClass {
2 @Override
3 void methodA() {
4 System.out.println("ClassB的methodA方法执行了");
5 }
6
7 @Override
8 void methodB() {
9 System.out.println("ClassB的methodB方法执行了");
10 }
11
12 @Override
13 void methodC() {
14 System.out.println("ClassB的methodA方法执行了");
15 }
16}
1 public static void main(String[] args) {
2 AbstractClass templateMethod;
3
4 templateMethod = new ImplClassA();
5 templateMethod.executeTemplateMethod();
6 System.out.println("--------------------");
7 templateMethod = new ImplClassB();
8 templateMethod.executeTemplateMethod();
9 }
10//输出
11ImplClassA的methodA方法执行了
12ImplClassA的methodB方法执行了
13ImplClassA的methodA方法执行了
14--------------------
15ImplClassB的methodA方法执行了
16ImplClassB的methodB方法执行了
17ImplClassB的methodA方法执行了
虽然 ImplClassA 和 ImplClassB 中无没有覆盖 executeTemplateMethod 方法, 但是调用时仍然执行两个实现类中覆盖的 methodA、methodB、methodC