当前位置: 首页 > article >正文

详解:模板设计模式

        模板设计模式(Template Pattern)是一种行为设计模式,在软件设计中有着广泛的应用,旨在提高代码的可维护性和可复用性。

一、定义与特点

  1. 定义

    • 模板设计模式定义了一个算法的骨架,将某些步骤推迟到子类中实现。这样,可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
  2. 特点

    • 定义算法骨架:在抽象类中定义一个算法的框架,即算法的骨架。
    • 具体步骤延迟到子类:将一些步骤的具体实现延迟到子类中,使得子类可以灵活地重新定义这些步骤。

二、结构与角色

  1. 抽象类(AbstractClass)

    • 实现了模板方法,定义了算法的骨架。
    • 包含了一些具体方法(有默认实现)和抽象方法(由子类实现)。
  2. 具体类(ConcreteClass)

    • 实现抽象类中的抽象方法,完成完整的算法。

三、举例

以下是一个关于咖啡和茶制备过程的例子,用于说明模板设计模式的应用:

1.创建一个抽象类Template,写了一个模版方法prepare,因为咖啡和茶制备过程:准备开水和倒进杯子这两个步骤都有并且一样所以直接提取出来放到模版中,因为煮的方法和添加的方法不同所以修饰为抽象类,要求子类继承重写实现。

public abstract class Template {
    // 准备饮料
    public void prepare() {
        // 准备开水
        System.out.println("准备开水");
        // 煮
        brew();
        // 倒进杯子
        System.out.println("倒进杯子");
        // 添加调味品
        addCondiments();
    }
    //抽象方法
    public abstract void brew();
    public abstract void addCondiments();
}

子类Coffee继承父类Template并重写父类的抽象方法 

class Coffee extends Template {
    @Override
   public void brew() {
        System.out.println("煮咖啡");
    }

    @Override
   public  void addCondiments() {
        System.out.println("加糖和牛奶");
    }
}

子类Tea继承父类Template并重写父类的抽象方法  

class Tea extends Template {
    @Override
    public void brew() {
        System.out.println("泡茶");
    }

    @Override
    public void addCondiments() {
        System.out.println("加柠檬");
    }
}

最后编写测试类,创建子类对象分别调用父类的模版方法prepare

 class Test {
    public static void main(String[] args) {
        Template coffee = new Coffee();
        coffee.prepare();
        System.out.println("=====================");
        Template tea = new Tea();
        tea.prepare();
    }
}

 抽象类Template也可以这样写(将子类中公共的代码块进行封装并在prepare方法中调用):

public abstract class Template {
    // 准备饮料
   public void prepare() {
        // 准备开水
        boilWater();
        // 煮
        brew();
        // 倒进杯子
        pourInCup();
        // 添加调味品
        addCondiments();
    }

    public abstract void brew();
    public abstract void addCondiments();

    public void boilWater() {
        System.out.println("准备开水");
    }

    public void pourInCup() {
        System.out.println("倒进杯子");
    }
}

四、模板设计步骤:

1.创建一个抽象类作为父类并创建一个模版方法,将子类中公共的代码块进行封装并在模版方法中调用

2.将子类特有的代码块封装成抽象的方法并在模版方法中调用

3.子类分别重写父类的抽象方法

4.在测试类中分别创建子类对象再调用父类的模版方法

示意图:

五、应用场景

  1. 算法框架固定,但具体步骤可能有变化:当多个类有相似的行为,但其中一些细节不同时,可以使用模板设计模式。
  2. 代码复用:通过将共同的行为放在一个抽象类的模板方法中,可以避免代码的重复。
  3. 框架设计:在框架设计中,模板模式经常用于定义框架的骨架和流程。
  4. 生命周期管理:在对象的生命周期管理中,模板模式可以确保某些过程按照一定的顺序执行。
  5. GUI应用中的事件处理:模板模式可以用于定义事件处理的框架。
  6. 数据库操作:在数据库操作中,可以使用模板模式来定义一些通用的步骤。

        综上所述,模板设计模式是一种非常有用的设计模式,它可以帮助我们提高代码的可维护性和可复用性。通过定义一个算法的骨架,并将某些步骤推迟到子类中实现,我们可以在不改变算法结构的情况下,灵活地重新定义算法中的某些步骤。


http://www.kler.cn/a/372540.html

相关文章:

  • 2024 Rust现代实用教程:1.2编译器与包管理工具以及开发环境搭建
  • Python 的安装及开发环境搭建
  • Rust 基础语法与常用特性
  • 【ArcGIS Pro实操第4期】绘制三维地图
  • Django ORM 数据库管理 提高查询、更新性能的技巧和编程习惯:
  • Apache POI—读写Office格式文件
  • Linux多机器文件分发
  • 时间序列分类任务---tsfresh库
  • 基于Spring Boot+Vue的健身房管理系统(协同过滤算法、功能非常多)
  • C++初阶(八)--内存管理
  • Spark RDD
  • C# CSV工具类,读取csv文件、将数据导出为csv文件格式,用DataGridView表格控件显示
  • 批量删除redis数据
  • N9300-S16语音芯片:提升电梯播报体验,实现导航声音播报提示
  • Spring Boot 创建项目详细介绍
  • list ------ 是一个带头双向循环的列表
  • 从0到1,解读安卓ASO优化!
  • At dp综合
  • react基础之reactHooks
  • JetPack Compose安卓开发之底部导航Tabbar
  • Windows on ARM上使用sherpa-onnx实现语音识别
  • MFC界面开发组件Xtreme Toolkit Pro v24全新发布—完整的SVG支持
  • FPGA 第一讲
  • 快速生成高质量提示词,Image to Prompt 更高效
  • 简道云和企业微信数据同步集成案例
  • Python 操作 读/写 Excel