模板模式(Template Pattern)是行为设计模式的一种,它在一个方法中定义了一个算法的骨架,而允许子类为一个或多个步骤提供实现。模板模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
在Java中,模板模式通常通过抽象类来实现,该类中定义了一个或多个抽象方法(对应于算法的某些步骤),以及一个或多个具体方法(对应于算法的固定部分)。子类需要实现这些抽象方法,以提供算法中这些步骤的具体实现。
下面是一个简单的Java模板模式的例子:
// 抽象类,定义算法的骨架
public abstract class AbstractClass {
// 模板方法,定义算法的骨架
public final void templateMethod() {
specificMethod1(); // 调用具体方法1
abstractMethod1(); // 调用抽象方法1,由子类实现
specificMethod2(); // 调用具体方法2
}
// 具体方法1
protected void specificMethod1() {
System.out.println("执行具体方法1...");
}
// 抽象方法1,由子类实现
protected abstract void abstractMethod1();
// 具体方法2
protected void specificMethod2() {
System.out.println("执行具体方法2...");
}
}
// 子类,实现抽象方法
public class SubClass extends AbstractClass {
// 实现抽象方法1
@Override
protected void abstractMethod1() {
System.out.println("子类实现抽象方法1...");
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
AbstractClass abstractClass = new SubClass();
abstractClass.templateMethod(); // 调用模板方法,执行算法
}
}
在这个例子中,AbstractClass
是一个抽象类,它定义了一个模板方法 templateMethod()
,这个方法按照算法的骨架依次调用了 specificMethod1()
、abstractMethod1()
和 specificMethod2()
这三个方法。其中,specificMethod1()
和 specificMethod2()
是具体方法,它们的实现在 AbstractClass
中已经给出;而 abstractMethod1()
是一个抽象方法,它的实现需要由子类来提供。SubClass
是 AbstractClass
的一个子类,它实现了 abstractMethod1()
方法,从而提供了算法中这个步骤的具体实现。在客户端代码中,我们创建了一个 SubClass
的实例,并调用了它的 templateMethod()
方法来执行算法。