UML类图:

模板方法父类:
package com.jthao.design.des.templatemethod;
public abstract class AbstractClass {
protected abstract void doAnyThing();
protected abstract void doSomeThing();
protected void hookMethod() {
System.out.println("空方法");
}
private void concreteMethod() {
System.out.println("已实现的基本方法,由AbstractClass类实现");
}
public void templateMethod() {
hookMethod();
concreteMethod();
doAnyThing();
doSomeThing();
}
}
具体实现类A:
package com.jthao.design.des.templatemethod;
public class ConcreteClass1 extends AbstractClass {
@Override
public void doAnyThing() {
System.out.println("ConcreteClass1 doAnyThing");
}
@Override
public void doSomeThing() {
System.out.println("ConcreteClass1 doAnyThing");
}
@Override
public void hookMethod() {
System.out.println("ConcreteClass1 重写父类方法");
}
}
具体实现类B:
package com.jthao.design.des.templatemethod;
public class ConcreteClass2 extends AbstractClass {
@Override
public void doAnyThing() {
System.out.println("ConcreteClass2 doAnyThing");
}
@Override
public void doSomeThing() {
System.out.println("ConcreteClass2 doAnyThing");
}
}
测试类:
package com.jthao.design.des.templatemethod;
public class templateTest {
public static void main(String[] args) {
AbstractClass abstractClass1 = new ConcreteClass1();
abstractClass1.templateMethod();
AbstractClass abstractClass2 = new ConcreteClass2();
abstractClass2.templateMethod();
}
}