设计模式|模板方法
模板方法(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();
}
//输出
ImplClassA的methodA方法执行了
ImplClassA的methodB方法执行了
ImplClassA的methodA方法执行了
--------------------
ImplClassB的methodA方法执行了
ImplClassB的methodB方法执行了
ImplClassB的methodA方法执行了
虽然 ImplClassA 和 ImplClassB 中无没有覆盖 executeTemplateMethod 方法, 但是调用时仍然执行两个实现类中覆盖的 methodA、methodB、methodC