首页 > 其他分享 >详解:模板设计模式

详解:模板设计模式

时间:2024-10-30 19:46:48浏览次数:7  
标签:子类 void 详解 Template println 设计模式 public 模板

        模板设计模式(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. 数据库操作:在数据库操作中,可以使用模板模式来定义一些通用的步骤。

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

标签:子类,void,详解,Template,println,设计模式,public,模板
From: https://blog.csdn.net/2401_83418369/article/details/143372116

相关文章

  • 二十三种设计模式之命令模式
    目录1.什么是命令模式?2.命令模式的组成3.命令模式的优点4.命令模式的缺点5.使用场景6.实践中的应用7.拓展:命令模式与现代框架8.结语        在软件工程领域,设计模式是解决特定问题的成熟模板。今天,我想和大家分享一种非常实用的行为设计模式——命令......
  • 前端开发设计模式: 单例模式
    什么是单例模式?(SingletonPattern) 单例模式,也叫单体模式,是一种创建型设计模式,是全局(或某一作用域范围)唯一实例,大家共享、复用一个实例对象。——最基础、最常见的设计模式1、保证对象实例只创建一次,后续的引用都是同一个实例对象2、保证一个类只有一个实例,并提供一个访问它......
  • 畅捷通T+数据集成到聚水潭的技术方案详解
    畅捷通T+数据集成到聚水潭的技术案例分享在企业信息化管理中,数据的高效流动和准确对接是业务顺利运行的关键。本文将聚焦于一个具体的系统对接集成案例:如何通过轻易云数据集成平台,将畅捷通T+中的其他出库单数据无缝集成到聚水潭系统中。本次方案名称为“T+其他出库单-->聚水潭其......
  • LLM大模型: Maskformer/Mask2Former语义分割原理详解
    1、自动驾驶、机器人、电商、监控等行业都涉及到image的sematicsegmentation,传统的方式:per-pixelclassification,每个像素点都要分类;如果进一步做 instance-levelsegmentation,可能还要改networkarchiture后重新训练,很麻烦。FAIR在2021年10月份的时候发表了论文:Per-PixelC......
  • 设计模式 - 简单工厂模式
    目录一、基本概念二、组成部分三、举例说明3.1 定义产品接口 3.2 定义具体产品类3.3 定义工厂类3.4 客户端代码四、优缺点4.1优点4.2缺点五、总结5.1适用场景5.2不适用场景5.3替代模式简单工厂模式(SimpleFactoryPattern)虽然不是GoF设计模式的一......
  • ThingsBoard规则链节点:GPS Geofencing Events节点详解
    引言1.GPSGeofencingEvents节点简介2.节点配置3.使用场景3.1物流跟踪3.2资产管理3.3安全监控3.4农业监测4.实际项目中的应用4.1项目背景4.2项目需求4.3实现步骤5.总结引言GPSGeofencingEvents是ThingsBoard规则链中的一个重要节点,用于处理......
  • ThingsBoard规则链节点:Generator节点详解
    引言1.Generator节点简介2.节点配置3.使用场景3.1模拟数据流3.2定时任务3.3事件触发3.4数据填充4.实际项目中的应用4.1项目背景4.2项目需求4.3实现步骤5.总结引言ThingsBoard是一个开源的物联网平台,提供了设备管理、数据收集、处理和可视化等功......
  • Nuxt.js 应用中的 imports:extend 事件钩子详解
    title:Nuxt.js应用中的imports:extend事件钩子详解date:2024/10/28updated:2024/10/28author:cmdragonexcerpt:imports:extend是Nuxt.js中的一个生命周期钩子,允许开发者在模块设置过程中扩展导入。使用此钩子,开发者可以灵活地管理和调整模块的导入配置,从而增......
  • Nuxt.js 应用中的 imports:dirs 事件钩子详解
    title:Nuxt.js应用中的imports:dirs事件钩子详解date:2024/10/30updated:2024/10/30author:cmdragonexcerpt:imports:dirs是Nuxt.js中的一个生命周期钩子,用于扩展导入目录。通过这个钩子,开发者可以灵活地添加、修改或删除项目中的导入目录,从而提高模块的可......
  • Nuxt.js 应用中的 imports:context 事件钩子详解
    title:Nuxt.js应用中的imports:context事件钩子详解date:2024/10/29updated:2024/10/29author:cmdragonexcerpt:imports:context是Nuxt.js中的一个生命周期钩子,主要用于在创建unimport上下文时调用。这个钩子为开发者提供了对模块导入上下文的操作能力,方......