设计模式——模板方法模式

news/2024/3/28 23:47:17/文章来源:https://blog.csdn.net/CDConlyred/article/details/128089583

模板方法模式

一、基本思想

定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

二、应用场景

  1. 算法的整体步骤很固定,但其中个别部分易变时,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。
  2. 当多个子类存在公共的行为时,可以将其提取出来并集中到一个公共父类中以避免代码重复。
    ~~~~     首先,要识别现有代码中的不同之处,并且将不同之处分离为新的操作。
    ~~~~     最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
  3. 当需要控制子类的扩展时,模板方法只在特定点调用钩子操作,这样就只允许在这些点进行扩展。

三、结构图

在这里插入图片描述
抽象类/抽象模板(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成
~~~~     模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。
~~~~     基本方法:是整个算法中的一个步骤,包含以下几种类型。
具体子类/具体实现(Concrete Class):实现抽象类中所定义的抽象方法和钩子方法,它们是一个顶级逻辑的一个组成步骤。

四、代码

在这里插入图片描述

五、优缺点

优点:

  1. 它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。
  2. 它在父类中提取了公共的部分代码,便于代码复用。
  3. 部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。

缺点:

  1. 对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,间接地增加了系统实现的复杂度。
  2. 父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。
  3. 由于继承关系自身的缺点,如果父类添加新的抽象方法,则所有子类都要改一遍。

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

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

相关文章

数据结构学习:Trie树

Trie一、概念二、代码实现三、Tire树的时间复杂度和空间复杂度四、Tire树的优势一、概念 Trie树,也叫"字典树",顾名思义,是一种专门处理字符串匹配的树形结构,用来解决在一组字符串集合中快速找到某个字符串类似于这种字符串匹配问题,可以使用RF暴力匹配、RK哈希匹配…

数字孪生技术栈的应用场景的优点

技术栈是一个IT术语,本意是指某项工作需要掌握的一系列技能组合的统称。那么对于如今炙手可热的数字孪生技术而言,数字孪生技术栈都会包括哪些底层技能?它又是如何构成和运行的呢? 北京智汇云舟科技有限公司成立于2012年&#xff…

【Rust日报】2022-11-28 使用 Rust 编写解释型语言

使用 Rust 编写解释型语言这是一本关于使用 Rust 来编写解释型语言的指导书.从理论基础, 内存分配, 真实实践, GC 等方面循序渐进的指导如何使用 Rust 来编写解释型语言.原文链接: https://rust-hosted-langs.github.io/book/introduction.htmlRust的所有权和生命周期这是一篇从…

黄佳《零基础学机器学习》chap2笔记

黄佳 《零基础学机器学习》 chap2笔记 第2课 数学和Python基础知识 文章目录黄佳 《零基础学机器学习》 chap2笔记第2课 数学和Python基础知识2.1 函数描述了事物间的关系机器学习中常用的一些函数2.2 捕捉函数的变化趋势2.3 梯度下降2.4 机器学习的数据结构--张量2.4.1 张量的…

面板模型进行熵值法分析

背景说明 熵值法(熵权法)是一种研究指标权重的研究方法,比如有5个指标,分别为指标1到指标5,并且有很多样本(比如100个样本),即100行*5列数据,此时研究该5个指标的权重分…

WSL2 请启用虚拟机平台 Windows 功能并确保在 BIOS 中启用虚拟化

bcdedit /set hypervisorlaunchtype autoC:\WINDOWS\system32>bcdedit /set hypervisorlaunchtype auto 操作成功完成。

使用nohup命令 或者 代码创建守护进程

目录 一、什么是守护进程? 1、守护进程的概念 2、为什么需要守护进程 二、理解进程组、会话、终端 三、创建守护进程的两种方式 1、nohup命令创建守护进程 2、代码创建守护进程 (1) 创建子进程,父进程退出 (2) 子进程创建新的会话 (3) 更改守护…

车载电子专用DC-DC方案PL5501

PL5501是一个同步4开关Buck-Boost能够调节输出电压的控制器高于或低于输入电压。PL5501运作输入电压范围从3.6 V到32 V (36 V Maximum)以支持各种应用程序。PL5501 buck采用恒ON时间控制,上位机采用升压和升压两种操作方式负荷和线路调节。开关频率可以设置为150kHz…

链式二叉树

链式二叉树一,相关函数接口实现1,前序遍历2,中序遍历3,后序遍历4,节点个数5,叶子结点个数6,树的高度7,第K层结点个数8,查找值为X的结点9,通过前序遍历数组构建…

关于虚拟机中IPI中断的思考

前言 感谢intel的vt-x技术,让虚拟机大部分指令可以直接运行在CPU中,只有少部分敏感指令需要有VMM来模拟执行。其中,每个CPU的LAPIC接收到的中断是虚拟化的开销一个大头。 LAPIC接收到的中断分为外部中断,内部中断,IP…

【SQL Server + MySQL三】数据库设计【ER模型+UML模型+范式】 + 数据库安全性

极其感动!!!当时学数据库的时候,没白学!! 时隔很长时间回去看数据库的笔记都能看懂,每次都靠这份笔记巩固真的是语雀分享要花钱,要不一定把笔记给贴出来(;༎ຶД༎ຶ) ,除…

第2-4-8章 规则引擎Drools实战(1)-个人所得税计算器

文章目录9. Drools实战9.1 个人所得税计算器9.1.1 名词解释9.1.2 计算规则9.1.2.1 新税制主要有哪些变化?9.1.2.2 资较高人员本次个税较少,可能到年底扣税增加?9.1.2.3 关于年度汇算清缴9.1.2.4 个人所得税预扣率表(居民个人工资、…

LeetCode - 76 最小覆盖子串

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 76. 最小覆盖子串 - 力扣(LeetCode) 题目描述 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回…

iClient for Leaflet设置地图掩膜

作者:lly 文章目录背景一、实现思路二、步骤代码三、完整代码背景 最近很多小伙伴需要只展示地图的某个行政区域,由于地图存在多个图层,所以图层过滤的方式并不能很好的适用,这个时候,我们可以考虑给地图覆盖一层掩膜…

界面控件DevExpress WPF的主题设计器,可轻松完成应用主题研发

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 DevExpress WPF的The…

双十二薅羊毛!这几款数码好物不可错过

双十二即将开始,在这段时间里有的人已经将自己心仪的塞满了整个购物车了吧,而有的人还没想好到底要入手什么,如果你也是还在纠结的话,不知道该买什么又或是想知道哪些产品更适合你入手,不妨来看看小编今天为你带来的这…

MySQL第一弹

目录 一、数据库的基本概念 1、数据 (Data) 2、表 3、数据库 4、数据库管理系统(DBMS) 5、数据库系统 6、DBMS的工作模式如下 二、数据库的发展史 1.第一代数据库(淘汰) 2.第二代数据库(现在用的基本上都是二代) 3.第…

亲戚小孩月薪17k,而我只有4k+,好慌......

我们总是在悲观与乐观中反复折磨自己,感觉自己一事无成。总是眼高手低,总以为大运会砸到自己,遇到挫折就会感到很沮丧。 大学四年没考到英语六级证书,小学教资考了两次。现在想要考研,但总是觉得来不及,或…

磁盘划分和磁盘格式化

文章目录列出装置的 UUID 等参数parted 列出磁盘的分区表类型与分区信息磁盘分区:gdisk、fdisk用 gdisk 新增分区槽用 gdisk 删除一个分区槽磁盘格式化(建立文件系统)XFS 文件系统 mkfs.xfsXFS 文件系统 for RAID 效能优化(Option…

java中csv导出-追加-列转行

1、问题描述 业务数据量比较大,业务上查询条件写入数据库,java定时去读,然后导出csv,供用户下载,因为有模板要求,前一部分是统计信息,后一部分是明细信息;首先csv中写入统计信息&am…