模板方法模式

title

模板模式(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() 方法,输出它们自己特定的算法流程。

powered by Gitbook© 2023 编外计划 | 最后修改: 2023-11-24 03:37:01

results matching ""

    No results matching ""