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

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 测试框架中的测试生命周期。

相关推荐
名字还没想好☜44 分钟前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
·薯条大王1 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
一壶浊酒..4 小时前
Scrape Webpack练习
开发语言·javascript·webpack
ZJH__GO4 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆4 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光5 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林5 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
命运之光5 小时前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
猿长大人5 小时前
C# | Serilog 新手入门
开发语言·c#·.net·log
marvelyu6 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库