设计模式详解---模板方法模式

1. 模板方式概念

当需要定义一个算法的框架,但允许具体步骤在子类中灵活实现时,可以使用模板方法(Template Method)设计模式。该模式通过定义一个模板方法以及一组抽象方法,将算法的结构固定,但具体实现延迟到子类中。

2.实现代码

以下是一个详细示例代码,展示了模板方法设计模式的应用:

java 复制代码
// 抽象类
abstract class AbstractClass {
    // 模板方法,定义了算法的框架
    public final void templateMethod() {
        step1();
        step2();
        step3();
    }

    // 抽象方法,由子类实现具体步骤
    protected abstract void step1();

    // 抽象方法,由子类实现具体步骤
    protected abstract void step2();

    // 具体方法,通用的步骤
    protected void step3() {
        System.out.println("AbstractClass: Performing step 3");
    }
}

// 具体类1
class ConcreteClass1 extends AbstractClass {
    @Override
    protected void step1() {
        System.out.println("ConcreteClass1: Performing step 1");
    }

    @Override
    protected void step2() {
        System.out.println("ConcreteClass1: Performing step 2");
    }
}

// 具体类2
class ConcreteClass2 extends AbstractClass {
    @Override
    protected void step1() {
        System.out.println("ConcreteClass2: Performing step 1");
    }

    @Override
    protected void step2() {
        System.out.println("ConcreteClass2: Performing step 2");
    }

    @Override
    protected void step3() {
        System.out.println("ConcreteClass2: Performing step 3");
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        AbstractClass class1 = new ConcreteClass1();
        class1.templateMethod();

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

        AbstractClass class2 = new ConcreteClass2();
        class2.templateMethod();
    }
}

在上述代码中,抽象类 AbstractClass 定义了一个模板方法 templateMethod(),它规定了算法的框架,并定义了一组抽象方法 step1() 和 step2(),用于具体步骤的实现。step3() 是一个具体方法,提供了一个通用的步骤,但也可以在具体子类中进行重写。

ConcreteClass1 和 ConcreteClass2 是具体类,它们继承自 AbstractClass 并实现了抽象方法。每个具体类根据自身需要,实现了特定的步骤。通过调用 templateMethod() 方法,可以按照算法框架执行具体的步骤。

3. 模板方法模式的优点

1.提供了一个算法框架,将通用的步骤封装在抽象类中,避免了代码重复。

2.具体的步骤由子类实现,使得算法的实现可以灵活变化。

  1. 提供了一种扩展的机制,可以在不改变算法结构的情况下,增加新的子类来改变具体的实现。

4.实际应用

模板方法模式在许多框架和库中得到广泛应用,例如在 Java 中,常见的应用场景包括模板方法模式在 Servlet 中的应用,以及 JUnit 测试框架中的测试生命周期。

相关推荐
rit843249923 分钟前
基于MATLAB的模糊图像复原
开发语言·matlab
fie888927 分钟前
基于MATLAB的声呐图像特征提取与显示
开发语言·人工智能
程序员小凯1 小时前
Spring Boot测试框架详解
java·spring boot·后端
豐儀麟阁贵1 小时前
基本数据类型
java·算法
_extraordinary_1 小时前
Java SpringMVC(二) --- 响应,综合性练习
java·开发语言
程序员 Harry2 小时前
深度解析:使用ZIP流式读取大型PPTX文件的最佳实践
java
@。1243 小时前
对于灰度发布(金丝雀发布)的了解
开发语言·前端
wxweven3 小时前
校招面试官揭秘:我们到底在寻找什么样的技术人才?
java·面试·校招
陈陈爱java3 小时前
新知识点背诵
java
失散133 小时前
分布式专题——39 RocketMQ客户端编程模型
java·分布式·架构·rocketmq