设计模式 – 模板方法模式(Template Method)

内容纲要

模板方法模式(Template Method)是一种行为设计模式,它在一个抽象类中定义了一个操作的骨架,并允许子类在不改变结构的情况下重新定义某些步骤的实现。这使得你可以在不修改抽象类的前提下,定制由抽象类定义的算法框架。

Java 示例代码:

首先,我们创建一个抽象类,它定义了模板方法和一些抽象方法。

public abstract class AbstractTemplate {
    // 模板方法,定义算法的框架
    public final void templateMethod() {
        stepOne();
        stepTwo();
        stepThree();
    }

    // 抽象方法,子类需要实现的具体步骤
    protected abstract void stepOne();

    protected abstract void stepTwo();

    protected abstract void stepThree();
}

接下来,我们创建两个子类,分别实现抽象类中的抽象方法。

public class ConcreteClassA extends AbstractTemplate {
    @Override
    protected void stepOne() {
        System.out.println("ConcreteClassA: Step One");
    }

    @Override
    protected void stepTwo() {
        System.out.println("ConcreteClassA: Step Two");
    }

    @Override
    protected void stepThree() {
        System.out.println("ConcreteClassA: Step Three");
    }
}

public class ConcreteClassB extends AbstractTemplate {
    @Override
    protected void stepOne() {
        System.out.println("ConcreteClassB: Step One");
    }

    @Override
    protected void stepTwo() {
        System.out.println("ConcreteClassB: Step Two");
    }

    @Override
    protected void stepThree() {
        System.out.println("ConcreteClassB: Step Three");
    }
}

现在,我们可以在客户端代码中使用这些类。

public class Client {
    public static void main(String[] args) {
        AbstractTemplate templateA = new ConcreteClassA();
        templateA.templateMethod();

        System.out.println("---------------------");

        AbstractTemplate templateB = new ConcreteClassB();
        templateB.templateMethod();
    }
}

输出:

ConcreteClassA: Step One
ConcreteClassA: Step Two
ConcreteClassA: Step Three
---------------------
ConcreteClassB: Step One
ConcreteClassB: Step Two
ConcreteClassB: Step Three

通过这个示例,你可以看到模板方法模式如何将算法的骨架定义在抽象类中,同时允许子类在不改变结构的情况下重新定义某些步骤。这有助于提高代码的复用性和扩展性。

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

close
arrow_upward