定义:在抽象类的一个操作中定义一系列步骤,而将操作的一些步骤在子类中进行实现,这样子类也不会改变该操作及其步骤顺序。它是一种类行为型模式
优点:
缺点:
适用场景:
结构:
抽象类/抽象模板(Abstract Class)
抽象模板类,负责给出一个算法的骨架。它由一个模板方法和若干个基本方法构成。这些方法的定义如下:
具体子类/具体实现(Concrete Class)
具体实现类,实现抽象类中所定义的抽象方法和钩子方法
实现:
public class TemplateMethodTest {
public static void main(String[] args) {
AbstractClass template = new ConcreteClass();
template.TemplateMethod();
}
}
// 抽象类
abstract class AbstractClass {
// 模板方法
public void TemplateMethod() {
if (HookMethod()) {
concreteMethod();
}
abstractMethod1();
abstractMethod2();
}
// 钩子方法
public boolean HookMethod() {
return true;
}
// 具体方法
public void concreteMethod() {
System.out.println("抽象类中的具体方法");
}
// 抽象方法1
public abstract void abstractMethod1();
// 抽象方法2
public abstract void abstractMethod2();
}
// 具体子类
class ConcreteClass extends AbstractClass {
// 重写父类的钩子方法,改变父类的具体方法执行
@Override
public boolean HookMethod() {
return false;
}
public void abstractMethod1() {
System.out.println("抽象方法1的实现");
}
public void abstractMethod2() {
System.out.println("抽象方法2的实现");
}
}
运行程序,结果如下:
抽象方法1的实现
抽象方法2的实现