【SpringBoot】模板设计模式应用

一、前言

常见的设计模式有23种,我们不得不提到模板方法设计模式,这是一种在软件开发中广泛使用的行为型设计模式之一。

二、模板方式是什么

全称是模板方法设计模式。

模板模式是一种行为设计模式。它的实现思路是,创建一个 模板方法 method,在该模板类中定义一些基本方法供模板方法 method 调用,这些基本方法通常是 protected 修饰的,因为它并不需要对外提供访问。模板方法 method 定义了一个算法的执行步骤,或者说能够提供一种默认的实现,这些实现概括一部分子类或者全部子类的共同部分(说白了就是概括了所有子类的共同特性,并且自己实现了它)。

看到上面的 UML 图,理清下思路:一个最基本的模板方法模式中,你需要创建一个抽象类一个具体的实现类,从上图可以看到在抽象类中持有一个模板方法一些基本方法,而子类只需要对这些基本方法进行实现即可,子类并不需要对模板方法进行实现,因为抽象类已经实现好了。 

白话讲就是:创建一个抽象类并在里面定义一些方法,有的抽象类本身已经实现,实现方法的复用,有的需要子类去实现提高拓展性。 

三、模板方法的原理

模板方法的原理可以简单概括如下:

  • 定义算法骨架:在抽象基类中定义一个模板方法,该方法包含了算法的整体流程,通常由一系列步骤组成。这些步骤可以是抽象方法、具体方法或空方法(钩子方法)。
  • 子类定制实现:子类继承基类,并实现其中的抽象方法,以提供算法的具体实现。子类可以根据需要定制算法的某些步骤,而不必修改整个算法的结构。
  • 模板方法的调用:在客户端代码中,通过调用抽象基类的模板方法来启动算法。模板方法按照定义的流程调用了各个步骤,以及可能的具体方法或钩子方法。

总之,通过这种方式,模板方法设计模式实现了方法的复用,可以更好去拓展,同时将算法的整体结构清晰的展现在一个方法中,使得代码易于理解和维护。

四、项目实战

假设提供一种造房子的算法。算法的步骤就是模拟造房子的过程:建地基、建支撑,最后添加墙和窗户。

最重要的一点就是不能改变此建造过程(也就是我们不能修改或者重写模板方法的意思),比如不可能在没用地基的时候就开始建造窗户吧!如果可以,那简直是胡扯!这个例子中,我们就创建了一个模板方法,将使用不同的方法完成对房子的建造。

1、HouseTemplate 模板类

为了确保子类不能重写(override)这个模板方法,应当使用 final。

HouseTemplate(这个类对应上面 UML 图的 AbstractClass)

public abstract class HouseTemplate {// 这是我们的模板方法,子类不能重写public final void buildHouse() {// 第一步:建造地基buildFoundation();// 第二步:建造支撑buildPillars();// 第三步:建造墙buildWalls();// 第四步:建造窗户buildWindows();System.out.println("房子建造好了");}protected void buildFoundation() {System.out.println("建筑基础用水泥、铁棒和沙子");}// 被子类实现的方法protected abstract void buildPillars();protected abstract void buildWalls();// 这个步骤可以默认实现,原文是 private 修饰,那么就是我规定死啦,这个步骤只能这样实现了。// 但为了易拓展,还是 protected 好点protected void buildWindows() {System.out.println("建造玻璃窗");}}

2、WoodenHouse 实现类

public class WoodenHouse extends HouseTemplate {/*** 建造支撑*/@Overrideprotected void buildPillars() {System.out.println("建造木质涂料建筑支撑");}/*** 建造墙*/@Overrideprotected void buildWalls() {System.out.println("建造木墙");}
}

3、GlassHouse 实现类

public class GlassHouse extends HouseTemplate {/*** 建造支撑*/@Overrideprotected void buildPillars() {System.out.println("建造带有玻璃涂层的建筑支撑");}/*** 建造墙*/@Overrideprotected void buildWalls() {System.out.println("建筑玻璃墙");}}

4、Controller 层,使用模板方法

    @PostMapping("/test")public String test() {// 创建一个模板,子类由 WoodenHouse 实现HouseTemplate houseTemplate = new WoodenHouse();// 调用模板方法houseTemplate.buildHouse();System.out.println("-------------------分隔符------------------");// 创建一个模板,子类由 GlassHouse 实现houseTemplate = new GlassHouse();// 调用模板方法houseTemplate.buildHouse();return "success!";}

5、调用接口  localhost:8080/house/test

建筑基础用水泥、铁棒和沙子
建造木质涂料建筑支撑
建造木墙
建造玻璃窗
房子建造好了
-------------------分隔符------------------
建筑基础用水泥、铁棒和沙子
建造带有玻璃涂层的建筑支撑
建筑玻璃墙
建造玻璃窗
房子建造好了

五、模板方法设计模式的特点

  • 模板方法不能被子类重写,可用 final 修饰。
  • 一个模板方法有确定的步骤组成,这些步骤可以被不同的子类实现,也可以自己实现。

六、模板方法设计模式应用场景

  • 对于一个业务方法步骤固定,但这些步骤可以有不同的实现情况下

七、参考文档

谈一谈我对‘模板方法’设计模式的理解(Template)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/451859.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转化率翻倍秘诀:打造私域标签体系的终极指南!

如今,私域运营逐渐成为企业标配甚至刚需。 但是大部分企业做私域只是从众,很少能真正想清楚做私域的目标和价值。要么是砸重金搭建团队,但是没有运营重心,最后转化效果很差;要么就是不太重视,人力精力投入…

老师没收学生东西违法吗怎么处理

身为一名老师,面对没收学生东西这个话题,确实让人感到有些尴尬和无奈。毕竟,我们教育的初衷是为了引导学生健康成长,而不是与他们产生矛盾和冲突。 老师在未经允许的情况下没收学生的物品,是违法的。学生的个人财物&a…

用友NC getFileLocal 任意文件下载

【产品介绍】 用友NC以“全球化集团管控、行业化解决方案、全程化电子商务、平台化应用集成”的管理业务理念而设计,采用J2EE架构和先进开放的集团级开发平台UAP,形成了集团管控8大领域15大行业68个细分行业的解决方案。 【漏洞介绍】 用友NC getFile…

品牌软文怎么写?纯干货

企业投放品牌软文到知名的媒体平台上,可以起到潜移默化的效果,提升产品或是品牌的知名度或是曝光度,品牌软文怎么写,有什么实用的技巧,今天伯乐网络传媒就来给大家分享品牌软文塑造攻略,教你轻松打动用户的…

计算机网络_1.6.1 常见的三种计算机网络体系结构

1.6.1 常见的三种计算机网络体系结构 1、OSI(七层协议)标准失败的原因2、TCP/IP参考模型3、三种网络体系结构对比 笔记来源: B站 《深入浅出计算机网络》课程 1、OSI(七层协议)标准失败的原因 (1&#xf…

关于网络面试题汇总

什么是TCP/IP五层模型?它们的作用是啥?基于TCP/IP实现的应用(层协议)有哪些? TCP/IP五层模型,从上向下分别是: 应用层:应用程序本身,应用层的作用是负责应用程序之间的…

LLM之LangChain(六)| 使用LangGraph创建一个超级AI Agent

几天前,LangChain正式宣布了名为LangGraph的新库,LangGraph建立在LangChain之上,简化了创建和管理Agent及其运行时的过程。 ​ 在这篇文章中,我们将全面介绍langGraph,什么是代理和代理运行时?Langg…

free5GC+UERANSIM

使用arp、ifconfig、docker inspect及网桥brctl 相关命令,收集容器IP及Mac地址相关信息,可以梳理出UERANSIMfree5GC模拟环境组网,如下图所示: 如上图所示:环境基于ubuntu 18.04 VMware虚机部署,5GC网元分别…

深度学习系列57: 清华大模型MiniCPM上手

MiniCPM 是面壁智能与清华大学自然语言处理实验室共同开源的系列端侧大模型,主体语言模型 MiniCPM-2B 仅有 24亿(2.4B)的非词嵌入参数量 1. 上手对比测试 mps比cpu大概快了9倍左右。 也可以在modelspore上测试:

Android简单支持项目符号的EditText

一、背景及样式效果 因项目需要,需要文本编辑时,支持项目符号(无序列表)尝试了BulletSpan,但不是很理想,并且考虑到影响老版本回显等因素,最终决定自定义一个BulletEditText。 先看效果&…

EasyCVR视频融合平台如何助力执法记录仪高效使用

旭帆科技的EasyCVR平台可接入的设备除了常见的智能分析网关与摄像头以外 ,还可通过GB28181协议接入执法记录仪,实现对执法过程的全称监控与录像,并对执法轨迹与路径进行调阅回看。那么,如何做到执法记录仪高效使用呢? …