模板方法模式
模板模式(Template Pattern)是一种行为型设计模式,它定义了一个操作中的算法框架,而将一些步骤延迟到子类中。模板模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
在模板模式中,定义一个抽象类,其中包含了算法的框架和一些基本操作方法。这些操作方法可以是抽象的,也可以是具体的。具体的操作方法可以有默认实现,子类可以选择性地覆盖这些方法。在抽象类中,定义了算法框架的流程,即一组算法流程,这些流程可以包含基本操作方法,也可以调用子类中的抽象方法。子类继承抽象类,并实现其中的抽象方法,从而实现自己的特定算法流程。
以下是使用模板模式的一个简单示例代码:
// 抽象类
public abstract class AbstractClass {
// 模板方法
public final void templateMethod() {
step1();
step2();
step3();
}
// 基本操作方法
protected void step1() {
System.out.println("step1");
}
// 抽象操作方法
protected abstract void step2();
// 钩子方法(可以由子类覆盖或不覆盖)
protected void step3() {
System.out.println("step3");
}
}
// 具体类A
public class ConcreteClassA extends AbstractClass {
@Override
protected void step2() {
System.out.println("ConcreteClassA: step2");
}
}
// 具体类B
public class ConcreteClassB extends AbstractClass {
@Override
protected void step2() {
System.out.println("ConcreteClassB: step2");
}
@Override
protected void step3() {
System.out.println("ConcreteClassB: step3");
}
}
// 测试类
public class Main {
public static void main(String[] args) {
AbstractClass a = new ConcreteClassA();
a.templateMethod();
AbstractClass b = new ConcreteClassB();
b.templateMethod();
}
}
在上述代码中,AbstractClass 是抽象类,它定义了算法的框架和一些基本操作方法。具体的操作方法可以是抽象的,也可以是具体的。在抽象类中,定义了算法框架的流程,即一组算法流程,这些流程可以包含基本操作方法,也可以调用子类中的抽象方法。子类继承抽象类,并实现其中的抽象方法,从而实现自己的特定算法流程。在测试类中,我们创建了两个对象,一个是 ConcreteClassA 的实例,一个是 ConcreteClassB 的实例。调用它们的 templateMethod() 方法,输出它们自己特定的算法流程。