java23种设计模式(二十一) -- 模板模式(行为设计模式)

JAVA设计模式总结之23种设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。 阅读详情

模板模式

简介

模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

结构

模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术。

模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来。

模板方法所代表的行为称为顶级行为,其逻辑称为顶级逻辑。模板方法模式的静态结构图如下所示:

在这里插入图片描述

角色

  • 抽象模板(Abstract Template)角色有如下责任:
  1. 定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。
  2. 定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。
  • 具体模板(Concrete Template)角色又如下责任:
  1. 实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。
  2. 每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。

代码实现

使用场景

现实生活中,茶和咖啡是随处可见的饮料。冲泡一杯茶或冲泡一杯咖啡的过程是怎样的?

我们来整理一下流程。

泡茶:
烧开水 ==> 冲泡茶叶 ==> 倒入杯中 ==> 添加柠檬
泡咖啡:
烧开水 ==> 冲泡咖啡 ==> 倒入杯中 ==> 添加糖和牛奶

由以上处理步骤不难发现,准备这两种饮料的处理过程非常相似。我们可以使用模板类方法去限定制作饮料的算法框架。

其中相同的具有共性的步骤(如烧开水、倒入杯中),直接在抽象类中给出具体实现。

而对于有差异性的步骤,则在各自的具体类中给出实现。

项目结构

在这里插入图片描述

抽象类

abstract class Beverage {

    // 模板方法,决定了算法骨架。相当于TemplateMethod()方法
    public void prepareBeverage() {
        boilWater();
        brew();
        pourInCup();
        if (customWantsCondiments())
        {
            addCondiments();
        }
    }
    
    // 共性操作,直接在抽象类中定义
    public void boilWater() {
        System.out.println("烧开水");
    }
    
    // 共性操作,直接在抽象类中定义
    public void pourInCup() {
        System.out.println("倒入杯中");
    }
    
    // 钩子方法,决定某些算法步骤是否挂钩在算法中
    public boolean customWantsCondiments() {
        return true;
    }
    
    // 特殊操作,在子类中具体实现
    public abstract void brew();
    
    // 特殊操作,在子类中具体实现
    public abstract void addCondiments();
    
}

具体类

class Tea extends Beverage {

    @Override
    public void brew() {
        System.out.println("冲泡茶叶");
    }

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

class Coffee extends Beverage {

    @Override
    public void brew() {
        System.out.println("冲泡咖啡豆");
    }

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

测试类

public class ApiTest {

    @Test
    public void testCommand(){
        System.out.println("============= 准备茶 =============");
        Beverage tea = new Tea();
        tea.prepareBeverage();

        System.out.println("============= 准备咖啡 =============");
        Beverage coffee = new Coffee();
        coffee.prepareBeverage();
    }

}

在这里插入图片描述

优点

模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。子类实现算法的某些细节,有助于算法的扩展。通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

缺点

每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。

适用场景

在某些类的算法中,用了相同的方法,造成代码的重复。控制子类扩展,子类必须遵守算法规则。

23种设计模式【Java】全案例解析 具体解析 创建型 结构型 7个原则 单一职责原则【SINGLE RESPONSIBILITY PRINCIPLE】: 一个类负责一项职责。 里氏替换原则【LISKOV SUBSTITUTION PRINCIPLE】: 继承与派生的规则。 依赖倒置原则【DEPENDENCE INVERSION PRINCIPLE】: 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程,不要针对实现编程。 接口隔离原则【INTERFACE SEGREGATION PRINC 阅读详情

相关推荐

java之23种设计模式

设计模式是软件开发中解决常见问题的可复用方案,遵循SOLID等设计原则(如单一职责、开闭原则等)。主要分为三类:创建型(如单例、工厂模式负责对象创建)、结构型(如适配器、装饰器模式处理对象组合)、行为型(如观察者、策略模式管理对象交互)。典型模式包括:适配器模式(协调接口差异)、装饰器模式(动态扩展功能)、策略模式(灵活切换算法)、观察者模式(实现发布-订阅机制)等。每种模式通过类图、代码示例和适用场景说明,帮助开发者构建灵活、可维护的代码结构,降低系统耦合度。

qq_36851469的博客 903

模板方法模式(Template)

1.简述 模板模式:定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。 2.角色 角色1:抽象模板(Abstract Template)角色有如下责任 定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。 定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一...

qq_39241239的博客 470

Java设计模式大全:23种常见的设计模式详解(一)

设计模式是一种解决问题的可复用的设计思路,它提供了一套经验丰富且经过验证的解决方案。设计模式可以帮助开发人员在软件开发过程中更加灵活、高效地解决常见问题,并提高代码的可维护性和可扩展性。设计模式提供了一种标准化和结构化的方法来解决一些常见的设计问题,使得代码更易于理解和维护。文章至此,已接近尾声!希望此文能够对大家有所启发和帮助。在未来的技术学习和工作中,期待与各位大佬共同进步,共同探索新的技术前沿。您的支持是作者创作的最大动力,如果您觉得这篇文章对您有所帮助,请考虑给予一点打赏。

凛鼕将至的博客 3721

JAVA-单例模式、继承、重写、super、多态

JAVA-单例模式、继承、重写、super、多态

qq_62642833的博客 432

学习stm32H7之路开始(STM32H7系列1) 前期准备,HAL库框架

2020.01.07 几个重要的参考网址 1.电子工程世界网 http://tags.eeworld.com.cn/tags/STM32H7 链接: link. 2.转:https://blog.youkuaiyun.com/simon223/article/list/2?t=1 链接: link. ———————————————— 版权声明:本文为优快云博主「Simon223」的原创文章,遵循 CC 4....

kengkengkeng963的博客 3408

空地多无人平台协同路径规划复现:从建模到Matlab仿真全解析

路径规划是机器人领域的核心基础技术,从单机避障到多平台协同,问题复杂度显著提升。空地协同规划融合无人机与无人车的异构优势,通过将地图分层建模为空中与地面栅格,并采用A*算法生成初始路径、B样条平滑以及改进遗传算法进行任务分配与时间同步优化,能够有效处理几何约束、运动学约束和避碰约束等。该技术广泛应用于区域巡逻、目标搜索、物资转运等任务场景,也是高校论文复现和工程仿真的常见课题。本文从问题建模、算法设计到Matlab代码结构,系统梳理了一套空地多无人平台协同路径规划的复现思路,同时给出坐标系校准、遗传算法收敛

weixin_32175665的博客 248

设计模式之模板方法设计模式

什么是模板方法模式 父类抽象出子类共有的方法,子类实现各自不同的业务。 总之就是一种行为有他们共同的方法,只是他们具体的实现不一样。比如开车这种行为模式,启动-->换挡-->踩油门。每种型号品牌的车都有共同的行为,但是不同型号品牌的车的实现方式可能不同,需要每个品牌型号的车自己实现这些功能。这样的定义上面行为的模式,称之为模板方法设计模式。 定义模板 public abstract class AbstractCar { // 启动 public abstract vo

wjx_jasin的博客 191

【DSP】【工程实战】从零构建C6678多核工程:CCS环境配置与启动模式详解

本文详细介绍了在CCS开发环境中从零构建TMS320C6678多核DSP工程的完整流程。内容涵盖KeyStone架构解析、工程创建、基础代码编写、链接命令文件配置、仿真器调试,并重点深入讲解了包括I2C EEPROM在内的多种一级启动模式原理与配置方法,为开发者提供了一套清晰、可复用的实战指南。

weixin_29164185的博客 416

模板方法模式——组合查询的实现

由于机房收费系统中有很多一样的窗体,于是就想把同一类的窗体抽象出来作为一个类,其他的窗体去继承抽象窗体就可以了。 一、重复性窗体 学生充值记录,上机记录查看等窗体一样:                      金额收取信息查询,金额退还信息查询等窗体一样:                    组合查询还有一类:操作员工作记录,学生信息维护,上机状态查询,学生上机信息统计

信息技术提高班第九期 3267

scannet数据集下载文件

scannet数据集下载文件 由于大家会申请scannet数据集,审批比较慢,我将下载的文件里面的内容贴出来,大家可以复制放进py文件中,运行就可以下载 ps:别再私信要数据集了,这个自己下载,如果光三维数据的话,还是很快的,当然如果路由器翻了墙的话,下载会更快。 #!/usr/bin/env python # Downloads ScanNet public data release # Run with ./download-scannet.py (or python download-scannet.

weixin_40766438的博客 9228

python文件转为可执行文件(.exe)的详细步骤

本文详细介绍了如何从零开始把python文件打包成为可执行文件(.exe)。

m0_67093160的博客 3万+

模板方法模式(模板方法设计模式)详解

前言 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。 例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。 这样的例子在生活中还有很多,例如,一个人每天会起床、吃饭

weixin_41979002的博客 2954

提示词编程在自动化内容审核中的应用

文章标题 提示词编程在自动化内容审核中的应用 关键词:提示词编程,自动化内容审核,人工智能,算法原理,系统架构设计,项目实战 摘要 本文旨在探讨提示词

AI天才研究院 1252

Java中23种设计模式的详细介绍

Java开发中23种设计模式详细介绍设计模式介绍设计模式分类设计模式六大原则开闭原则(Open Close Principle)里氏代换原则 设计模式介绍 设计模式(Design Patterns): 一套被反复使用,多数人知晓,经过分类编目,代码设计的总结 使用设计模式是为了可重用代码,让代码更容易理解,保证代码可靠性 项目中合理运用设计模式可以完美的解决很多问题,每种模式都有相应的原理...

攻城狮Chova的博客 1万+

【YOLO系列】YOLOv5超详细解读(源码详解+入门实践+改进)

一文带你详细了解YOLOv5(含YOLO系列论文讲解+源码详解+入门实践+算法改进)

路人贾的博客 25万+

XCP实战系列介绍01-测量与标定底层逻辑介绍

XCP-测量与标定底层代码实现介绍,通过对相关API调用关系介绍加深开发人员对其功能的了解。

initiallizer的博客 1万+

深入理解Java设计模式:23种模式的全面解析

在Java编程中,设计模式是解决常见问题的最佳实践总结,以下是对23种常见Java设计模式的详细解析。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java23种设计模式详解

提供了一种方式来封装一组具有相关联的或相互依赖的对象的创建。一个抽象工厂定义了一个接口,用于创建相关或依赖对象的家族,而实际的具体工厂则负责生成具体的对象。下面是一个使用Java实现的抽象工厂模式的简单示例:假设我们有一个图形应用程序,需要绘制不同类型的形状(如圆形、矩形等)和颜色填充策略(如红色、蓝色等)。每种形状都可以有不同的颜色填充,这就构成了两个相关的对象家族。// 抽象产品接口:形状// 具体产品:圆形@Override// 具体产品:矩形@Override。

2301_76508397的博客 3791

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

全面解读Java的23种设计模式

需要注意的是,混合使用设计模式要谨慎,不要过度使用设计模式,以免代码过于复杂和难以维护。选择合适的设计模式和合适的组合方式,可以使代码更加简洁、高效和易于维护。

weixin_39158966的博客 3265

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JAVA 23种设计模式【入门篇】

😹 作者: 爱摸鱼的小凯 😻 爱摸鱼的小凯的博客 😽 觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!!

只有登上山顶,才能看到那边的风光 1万+

Java 23种设计模式 - 行为型模式11种

Java 23种设计模式 - 行为型模式11种

26857259 849

23种设计模式之模板模式

package 二十三种设计模式之模板模式;open();i

2201_75999403的博客 1799

Java中23种设计模式

Java中的23种设计模式源自经典的《设计模式:可复用面向对象软件的基础》(也被称作Gang of Four,GoF)一书。这些模式可以分为三大类:创建型模式、结构型模式和行为型模式。

二哈喇子! 1660

JAVA的23种设计模式

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。

“ 春风若有怜花意,能否许我再少年。” 1132

Java之——23种设计模式汇总

在软件开发的历程中,正是无数前辈们本着追求完美的架构设计和代码设计的初心。经过无数前辈们的探索和努力,逐渐形成了一系列的设计原则和设计模式。 对于Java语言来说,通常包含有6大设计原则和23种设计模式,这些都是前辈们对于开发思想的结晶。我们学习和理解这些设计原则和设计模式,深入掌握其实现原理和使用场景,能够更好的设计我们的系统架构。编写出具有高性能、高并发、高可用、高可扩展性和高可维护性的代码...

冰河的专栏 4351
上一篇: java23种设计模式(二十) -- 策略模式(行为设计模式)
下一篇: java23种设计模式(二十二) -- 访问者模式(行为设计模式)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值