模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的骨架,将算法中不变的部分封装在一个方法中,而将可变的部分留给子类来实现。通过模板方法模式,可以在不改变算法结构的情况下,允许子类重新定义算法中的某些步骤。
在模板方法模式中,主要有以下几个角色:
1. AbstractClass(抽象类):定义了一个模板方法,用于定义算法的骨架,其中包含了算法中的各个步骤,有些步骤可以是抽象的,由子类实现。
2. ConcreteClass(具体类):实现了抽象类中的抽象方法,完成算法中的具体步骤。
下面是一个简单的Java示例,演示模板方法模式的实现:
// 抽象类
abstract class AbstractClass {
// 模板方法,定义算法的骨架
public void templateMethod() {
step1();
step2();
step3();
}
// 抽象方法,由子类实现
protected abstract void step1();
// 具体方法,子类也可以选择是否覆盖
protected void step2() {
System.out.println("Step 2 (default implementation)");
}
// 抽象方法,由子类实现
protected abstract void step3();
}
// 具体类A
class ConcreteClassA extends AbstractClass {
@Override
protected void step1() {
System.out.println("ConcreteClassA: Step 1 implementation");
}
@Override
protected void step3() {
System.out.println("ConcreteClassA: Step 3 implementation");
}
}
// 具体类B
class ConcreteClassB extends AbstractClass {
@Override
protected void step1() {
System.out.println("ConcreteClassB: Step 1 implementation");
}
@Override
protected void step3() {
System.out.println("ConcreteClassB: Step 3 implementation");
}
}
public class TemplateMethodPatternExample {
public static void main(String[] args) {
AbstractClass classA = new ConcreteClassA();
classA.templateMethod();
System.out.println();
AbstractClass classB = new ConcreteClassB();
classB.templateMethod();
}
}
在这个例子中,模板方法模式通过定义抽象类(`AbstractClass`)和具体子类(`ConcreteClassA`和`ConcreteClassB`)来实现算法的骨架和具体步骤。抽象类中的`templateMethod()`定义了算法的整体结构,其中包含了三个步骤:`step1()`、`step2()`和`step3()`。具体子类可以选择性地实现或覆盖这些步骤,从而实现自己的算法逻辑。通过模板方法模式,可以实现算法的复用和灵活性,同时避免代码重复。