从原理到实践:面向对象设计中的经典模式-模板方法模式

140 阅读2分钟

Java模板方法模式是一种行为型设计模式,其本质是在一个抽象类中定义了一个算法的框架,而将具体实现延迟到子类中实现。它允许子类可以修改算法的某些步骤,但不改变算法的结构。

以下是一个简单的Java模板方法模式的示例:

// 抽象类
public abstract class AbstractClass {
    public void templateMethod() {
        // 执行步骤1
        step1();

        // 执行步骤2
        step2();

        // 执行步骤3
        step3();
    }

    protected abstract void step1();

    protected abstract void step2();

    protected void step3() {
        System.out.println("执行默认的步骤3");
    }
}

// 具体类1
public class ConcreteClass1 extends AbstractClass {
    @Override
    protected void step1() {
        System.out.println("执行具体类1的步骤1");
    }

    @Override
    protected void step2() {
        System.out.println("执行具体类1的步骤2");
    }
}

// 具体类2
public class ConcreteClass2 extends AbstractClass {
    @Override
    protected void step1() {
        System.out.println("执行具体类2的步骤1");
    }

    @Override
    protected void step2() {
        System.out.println("执行具体类2的步骤2");
    }

    @Override
    protected void step3() {
        System.out.println("执行具体类2的步骤3");
    }
}

// 测试代码
public class TemplateMethodDemo {
    public static void main(String[] args) {
        AbstractClass c1 = new ConcreteClass1();
        c1.templateMethod();  // 输出:执行具体类1的步骤1、执行具体类1的步骤2、执行默认的步骤3

        AbstractClass c2 = new ConcreteClass2();
        c2.templateMethod();  // 输出:执行具体类2的步骤1、执行具体类2的步骤2、执行具体类2的步骤3
    }
}

在这个示例中,抽象类AbstractClass中定义了一个模板方法templateMethod(),该方法固定了算法的框架,但是其中某些步骤被定义成抽象方法或者可重写的方法,以便让子类实现自己的行为。具体类ConcreteClass1和ConcreteClass2继承自AbstractClass,并实现了其中的抽象方法或可重写方法来完成自己特有的行为。测试代码展示了如何使用模板方法模式来实现对象的算法框架,同时允许子类灵活地实现自己的行为。