设计模式|模板方法

模板方法(TemplateMethod)定义一个操作中的算法的骨架, 而将一些步骤延迟到子类中, 使得子类可以不改变一个算法的结构即可重新定义算法的某些特定的步骤。

类关系

            +--------------------+
            |      AbstractClass |
            +-^-----------^------+
  extends     |           |
         +----+           +--+ extends
         |                   |
+--------+--------+    +-----+------------+
|    ImplClassA   |    |  ImplClassB      |
+-----------------+    +------------------+
public abstract class AbstractClass {
    abstract void methodA();

    abstract void methodB();

    abstract void methodC();

    void executeTemplateMethod() {
        methodA();
        methodB();
        methodC();
    }
}
public class ImplClassA extends AbstractClass {
    @Override
    void methodA() {
        System.out.println("ClassA的methodA方法执行了");
    }

    @Override
    void methodB() {
        System.out.println("ClassA的methodB方法执行了");
    }

    @Override
    void methodC() {
        System.out.println("ClassA的methodA方法执行了");
    }
}
public class ImplClassB extends AbstractClass {
    @Override
    void methodA() {
        System.out.println("ClassB的methodA方法执行了");
    }

    @Override
    void methodB() {
        System.out.println("ClassB的methodB方法执行了");
    }

    @Override
    void methodC() {
        System.out.println("ClassB的methodA方法执行了");
    }
}
    public static void main(String[] args) {
        AbstractClass templateMethod;

        templateMethod = new ImplClassA();
        templateMethod.executeTemplateMethod();
        System.out.println("--------------------");
        templateMethod = new ImplClassB();
        templateMethod.executeTemplateMethod();
    }
//输出
ImplClassAmethodA方法执行了
ImplClassAmethodB方法执行了
ImplClassAmethodA方法执行了
--------------------
ImplClassBmethodA方法执行了
ImplClassBmethodB方法执行了
ImplClassBmethodA方法执行了

虽然 ImplClassA 和 ImplClassB 中无没有覆盖 executeTemplateMethod 方法, 但是调用时仍然执行两个实现类中覆盖的 methodA、methodB、methodC