设计模式—模板方法模式

news2024/11/25 16:46:20

模板方法模式:

定义一个操作的流程框架,而将流程中一些步骤延迟到子类中实现。使得子类在不改变流程结构的情况下,重新定义流程中的特定步骤。

主要角色:

抽象类: 负责给出操作流程的轮廓或框架,由模板方法和若干基本方法组成。
  1、抽象方法:由抽象类声明,在具体子类中实现个性化逻辑。
  2、具体方法:在抽象类中实现的公共方法(也可以在子类中覆盖)
  3、模板方法:定义了流程框架,按照流程顺序调用抽象或者具体方法。
具体子类: 实现抽象类中所定义的抽象方法。

类图

在这里插入图片描述

优点:

1、将相同的逻辑代码通过 concreateMethod 提取到抽象类中,提高了代码复用性。
2、、实现了反向控制,符合开闭原则。通过父类抽象类调用子类的具体实现,实现了反向控制。

缺点

1、每个不同的实现都需要定义一个子类,会导致类的个数增加,使系统更庞大。
2、父类中的抽象方法由子类实现,子类的结果影响父类的结果,提高代码的阅读难度。

案例

需求背景: 实现一个客户创建接口供外部系统调用,包括客户基础信息、客户地址信息、客户联系人信息三个维度。每个维度都有系统来源、有效期字段。数据写入要对基本信息校验,及查询数据库做重复性校验。
设计思路: 定义一个基础的抽象类,包含抽象主键校验,和具体的系统来源字段校验,模板方法内调用两个校验。在具体的客户、地址、联系人类中实现具体的主键校验逻辑。在这里插入图片描述

实际项目感悟:

1、这种设计模式concreateMethod 可以将公用部分有效提取,简化代码。
2、AbstractMethod 实现往往需要使用泛型,包括方法的入参和返回结果。
3、这种设计模式在未学习前,提取了抽象类和一些公共逻辑放在具体方法中,但是没有考虑到再创建一个模板方法,将抽象方法和具体方法串联起来。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用户模块的增删改查接口设计

MongoDB 数据库常用操作 MongoDB数据库中常用的操作包括: 插入数据:使用insertOne()或insertMany()方法向集合中插入数据。查询数据:使用find()方法查询满足条件的数据。更新数据:使用updateOne()或updateMany()方法更新满足条件…

【力扣刷题 | 第九天】150 逆波兰 239滑动窗口最大值

目录 前言: 150. 逆波兰表达式求值 - 力扣(LeetCode) 239. 滑动窗口最大值 - 力扣(LeetCode) 总结: 前言: 本片仍然是利用栈与队列的思想来解决实际问题,希望各位小伙伴可以和我…

chatgpt赋能python:Python断言之等于两个值其中一个

Python断言之等于两个值其中一个 在Python编程中,我们经常需要对程序进行断言,以判断程序是否正确地运行。其中一种常见的断言方式是判断某个方法的结果是否等于两个值中的其中一个。本文将介绍如何在Python中实现这种断言,并探讨其在实际应…

⑨电子产品拆解分析-触摸化妆镜

⑨电子产品拆解分析-触摸化妆镜 一、功能介绍二、电路分析以及器件作用1、电源部分2、触摸部分3、灯光控制部分三、数据手册以及其它资料1、注意点2、数据手册汇总一、功能介绍 ①短按白光、暖光、冷光三档色温切换;②长按支持无极调光;③三档调亮度关机记忆当前亮度功能;二…

chatgpt赋能python:Python模块更新技巧详解

Python模块更新技巧详解 为什么需要更新Python模块? Python语言自问世以来一直在得到广泛的应用,其中最大的原因在于它的灵活性和可扩展性。Python拥有丰富的模块库,覆盖了各种不同的应用场景。然而,由于软件环境不断发展&#…

服务器配置远程vscode

1 使用sftp同步远程代码 打开vscode,在扩展种搜索sftp,点击安装。   按住快捷键shiftctrlp,可以打开界面顶部的命令行,输入sftp,点击如下图的config选项:   会自动在.vscode目录下创建一个名为sftp.j…

photoscan(metashape)跑GPS辅助的无人机影像SfM(空三)教程

刚打开的photoscan界面如下图所示:   然后,点击工作区左上角的添加堆块选项:   可以看到新增了一个名为“Chunk 1”的堆块,然后,右击“Chunk 1”,依次选择add、添加照片:   即可弹出照…

踩坑系列 Spring websocket并发发送消息异常

文章目录 示例代码WebSocketConfig配置代码握手拦截器代码业务处理器代码 问题复现原因分析解决方案方案一 加锁同步发送方案二 使用ConcurrentWebSocketSessionDecorator方案三 自研事件驱动队列(借鉴 Tomcat) 总结 今天刚刚经历了一个坑,非…

云原生之使用Docker部署wordpress网站

云原生之使用Docker部署wordpress网站 一、wordpress介绍二、检查本地docker环境1.检查docker状态2.检查docker版本 三、下载wordpress镜像四、创建数据库1.创建数据目录2.创建mysql数据库容器3.查看mysql容器状态4.远程客户端测试连接数据库 五、部署wordpress1.创建wordpress…

java开发——程序性能的优化方法

java开发——程序性能的优化方法 1、算法逻辑优化2、redis缓存优化3、异步编排4、MQ削峰填谷5、预加载6、sql调优7、jvm调优8、集群搭建 后端开发必须学习的优化思想! 1、算法逻辑优化 (1) 什么算法优化? 算法优化的思想就是,对于同一个问题…

ll 内容详解

linux的数据存储是以block(块)为单位的 : 1个block 4 KB 4096 字节 1KB 1024 字节[rootCTF-RHCSA-2 ~]# ll -sh total 76K (列表中 所有文本文件 总共占用磁盘空间的KB大小 )(root用户家目录中…

cortex A7核按键中断实验

cortex A7核按键中断实验 一、分析电路图 实验目的:完成板子三个按键操作 1.1 电路图IO口 KEY1------>PF9 KEY2------>PF7 KEY3------>PF8 1.2 工作原理 KEY1 ------> PF9 ------> 按键触发方式:下降沿触发 KEY2 ------> PF7 …

ElasticSearch安装与介绍

目录 ElasticSearch安装与介绍Elastic Stack简介ElasticsearchLogstashKibanaBeats ElasticSearch快速入门简介下载单机版安装启动ElasticSearch 错误分析错误情况1错误情况2错误情况3 ElasticSearch-Head可视化工具通过Docker方式安装通过Chrome插件安装 ElasticSearch中的基本…

docker部署prometheus+grafana+alertmanager+dingtalk实现钉钉告警

目录 docker安装准备工作镜像拉取容器启动启动node-exporter启动prometheus启动grafana启动webhook-prometheus-dingtalk启动alertmanager所有容器启动成功如下 将prometheus和alertmanager进行关联在prometheus目录下新建一个rules.yml文件的告警规则修改prometheus.yml文件&a…

NLP学习笔记十二-skip-gram模型求解

NLP学习笔记十一-skip-gram模型求解 上一篇文章,我们见到了skip-gram模型的原理,这里我们在陈述一下skip-gram模型其实是基于分布相似性原理来设计的,在skip-gram模型中,他认为一个词的内涵可以由他的上下文文本信息来概括&#…

AcWing 837. 连通块中点的数量

题目如下: 给定一个包含 n个点(编号为 1∼ n)的无向图,初始时图中没有边。 现在要进行 m 个操作,操作共有三种: C a b,在点 a和点 b之间连一条边,a 和 b 可能相等;Q1 …

【iMessage苹果日历推真机群控】使用虚拟化平台创建一个 macOS 虚拟机

PC 虚拟机上部署群控推送并模拟苹果 iMessage 推送消息是比较复杂的任务。由于苹果的 iMessage 服务是基于苹果设备和操作系统的,模拟 iMessage 推送需要考虑苹果的生态系统和安全机制。 以下是一种可能的方法,但请注意这是一个高级设置,需要…

chatgpt赋能python:Python编程中的放大代码技巧

Python 编程中的放大代码技巧 Python 是一门广泛应用于各个领域的编程语言。由于它易学易用、可移植性好、开发效率高等特点,使其在人工智能、大数据分析、网站开发等领域被广泛应用。在实际编程中,随着代码量的增加,需要更好地组织和管理代…

BFS 广度优先搜索

广度优先搜索BFS(Breadth First Search)也称为宽度优先搜索,它是一种先生成的结点先扩展的策略,类似于树的层次遍历。 在广度优先搜索算法中,解答树上结点的扩展是按它们在树中的层次进行的。首先生成第一层结点&#…

TS系列之keyof详解,示例

文章目录 前言一、keyof是什么总结 前言 如果你用过TS的工具类型,Partial、Required、Pick、Record。那么你可能看过他们内部实现都有共同点就是keyof关键字。即使没有见过,那么下面就一起来了解一下,keyof关键字的详细作用吧。 一、keyof是…