当前位置: 首页 > news >正文

设计模式: 模板方法模式

文章目录

  • 一、什么是模板方法模式
  • 二、模板方法模式结构
  • 三、优点

一、什么是模板方法模式

  • 模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,将一些步骤延迟到子类中实现。这样可以使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

  • 模板方法模式是一种非常有用的设计模式,它通过定义算法的骨架和延迟执行某些步骤,使得子类可以重新定义特定步骤的实现,同时保持算法的整体结构不变。这样可以提高代码的复用性和扩展性。

二、模板方法模式结构

  • AbstractClass(抽象类):定义了一个模板方法,其中包含算法的框架和具体步骤的顺序,同时可能包含一些默认实现。
  • ConcreteClass(具体子类):实现了抽象类中的抽象方法,提供了算法中特定步骤的具体实现。

示例:

// AbstractClass
public abstract class CoffeeMaker {public final void makeCoffee() {boilWater();brewCoffeeGrinds();pourInCup();addCondiments();}public void boilWater() {System.out.println("Boiling water");}public void pourInCup() {System.out.println("Pouring into cup");}public abstract void brewCoffeeGrinds();public abstract void addCondiments();
}// ConcreteClass
public class MyCoffeeMaker extends CoffeeMaker {@Overridepublic void brewCoffeeGrinds() {System.out.println("Dripping Coffee through filter");}@Overridepublic void addCondiments() {System.out.println("Adding Sugar and Milk");}
}

在上面的示例中,CoffeeMaker 是抽象类,定义了制作咖啡的模板方法 makeCoffee(),以及一些具体步骤的默认实现。MyCoffeeMaker 是具体子类,实现了抽象方法来提供特定步骤的具体实现。

三、优点

  • 定义了算法的框架,提供了一种通用的解决方案。
  • 可以避免代码重复,将公共部分封装在父类中。

相关文章:

设计模式: 模板方法模式

文章目录 一、什么是模板方法模式二、模板方法模式结构三、优点 一、什么是模板方法模式 模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,将一些步骤延迟到子类中实现。这样可以使得子类…...

C++ 打印输出十六进制数 指定占位符前面填充0

C 打印十六进制数据&#xff0c;指定数据长度&#xff0c;前面不够时&#xff0c;补充0. 代码如下&#xff1a; #include <iostream> #include <iomanip> #include <cmath>using namespace std;int main() {unsigned int id 0xc01;unsigned int testCaseId…...

基于 Win Server 2008 复现 IPC$ 漏洞

写在前面 本篇博客演示了使用 winXP&#xff08;配合部分 win10 的命令&#xff09;对 win server 2008 的 IPC$ 漏洞进行内网渗透&#xff0c;原本的实验是要求使用 win server 2003&#xff0c;使用 win server 2003 可以规避掉很多下面存在的问题&#xff0c;建议大家使用 …...

HTML笔记2

11&#xff0c;路径 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Document</title> <…...

使用Docker实现Jenkins+Python + Pytest +Allure 接口自动化

一、Jenkins搭建 参考《Docker 安装 Jenkins》 进入 jenkins 容器 CLI 界面 docker exec -itu root jenkins /bin/bash二、准备条件 1、替换镜像内源 为了安装wget&#xff0c;默认用yum会安装不上wget命令&#xff0c;参考文章《docker容器内如何更换yum源【只想换成国内…...

论企业安全漏洞扫描的重要性

前言 随着信息技术的迅猛发展和互联网的广泛普及&#xff0c;网络安全问题日益凸显。在这个数字化的世界里&#xff0c;无论是企业还是个人&#xff0c;都面临着前所未有的安全威胁。安全漏洞&#xff0c;作为这些威胁的源头&#xff0c;常常被忽视或无法及时发现。 而安全漏洞…...

23.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-实现配置工具数据结构

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;22.加载配置文件…...

STM32CubeMX学习笔记20——SD卡FATFS文件系统

1. FATFS文件系统简介 文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构&#xff08;即在存储设备上组织文件的方法&#xff09;。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统&#xff0c;简称文件系统&#xff1b;不带文件系统的SD卡仅能…...

Facebook商城号为什么被封?如何防封?

由于Facebook商城的高利润空间&#xff0c;越来越多的跨境电商商家注意到它的存在。Facebook作为全球最大、用户量最大的社媒平台&#xff0c;同时也孕育了一个巨大的商业生态&#xff0c;包括广告投放、商城交易等。依托背后的大流量&#xff0c;Facebook商城起号较快&#xf…...

【教程】APP备案全攻略:确保你的应用合规上线

【教程】APP备案全攻略&#xff1a;确保你的应用合规上线 摘要 本文详细介绍了中国大陆地区互联网信息服务提供者&#xff08;AP&#xff09;进行APP备案的流程、要求和注意事项。包括备案对象、备案方式、备案内容、备案流程等方面的详细说明&#xff0c;帮助开发者顺利完成…...

Vue入门2

v-model 原理&#xff1a;v-model本质上是一个语法糖。例如应用于输入框&#xff0c;就是value属性和input事件的合写。 作用&#xff1a;提供数据的双向绑定 数据变&#xff0c;视图跟着变 :value视图变&#xff0c;数据跟着变 input 注意&#xff1a;$event用于在模板中&…...

简介:CMMI软件能力成熟度集成模型

前言 CMMI是英文Capability Maturity Model Integration的缩写。 CMMI认证简称软件能力成熟度集成模型&#xff0c;是鉴定企业在开发流程化和质量管理上的国际通行标准&#xff0c;全球软件生产标准大都以此为基点&#xff0c;并都努力争取成为CMMI认证队伍中的一分子。 对一个…...

mysql的其他问题

1.MySQL数据库作发布系统的存储&#xff0c;一天五万条以上的增量&#xff0c;预计运维三年,怎么优化&#xff1f; a. 设计良好的数据库结构&#xff0c;允许部分数据冗余&#xff0c;尽量避免join查询&#xff0c;提高效率。 b. 选择合适的表字段数据类型和存储引擎&#xf…...

数据结构---复杂度(2)

1.斐波那契数列的时间复杂度问题 每一行分别是2^0---2^1---2^2-----2^3-------------------------------------------2^(n-2) 利用错位相减法&#xff0c;可以得到结果是&#xff0c;2^(n-1)-1,其实还是要减去右下角的灰色部分&#xff0c;我们可以拿简单的数字进行举例子&…...

【设计模式】设计原则和常见的23种经典设计模式

设计模式 1. 设计原则&#xff08;记忆口诀&#xff1a;SOLID&#xff09;【记忆口诀&#xff1a;单开里依接迪合&#xff08;单开礼仪接地和&#xff09;】 &#xff08;1&#xff09;单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09; &#xff…...

Spring Cloud Gateway自定义断言

问题&#xff1a;Spring Cloud Gateway自带的断言&#xff08;Predicate&#xff09;不满足业务怎么办&#xff1f;可以自定义断言&#xff01; 先看Spring Cloud Gateway是如何实现断言的 Gateway中断言的整体架构如下&#xff1a; public abstract class AbstractRoutePred…...

智能测径仪在胶管行业的应用

关键字&#xff1a;胶管外径尺寸测量&#xff0c;胶管检测仪器&#xff0c;胶管外径检测&#xff0c;高温胶管外径检测&#xff0c;软硬胶管检测&#xff0c; 智能测径仪在家胶管行业中的应用主要体现在对胶管外径的精确测量和控制上。在胶管生产过程中&#xff0c;外径的大小直…...

vue自定义主题皮肤方案

方案一&#xff1a;CSS变量换肤&#xff08;推荐&#xff09; 利用css定义变量的方法&#xff0c;用var在全局定义颜色变量&#xff08;需将变量提升到全局即伪类选择器 :root&#xff09;然后利用js操作css变量&#xff0c;document.getElementsByTagName(‘body’)[0].style…...

iOS中使用schema协议调用APP和使用iframe打开APP的例子

大家好我是咕噜美乐蒂&#xff0c;很高兴又和大家见面了&#xff01; 当调用自定义 URL scheme 或使用 iframe 打开应用程序时&#xff0c;可以采取以下详细步骤&#xff1a; 使用自定义 URL scheme 协议调用应用程序 1.首先&#xff0c;确认目标应用程序已经注册了自定义 U…...

2024.3.11

提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 #include <iostream> #include<string> using namespace std;int main() {cout << "please input a string:" << endl;string str;g…...

[RKNN] 零拷贝接口:从原理到实践的性能优化指南

1. 为什么需要零拷贝接口 第一次接触RKNN零拷贝接口时&#xff0c;我正为一个智能摄像头项目焦头烂额。当时用通用接口跑YOLOv5模型&#xff0c;帧率始终卡在15FPS上不去。直到把代码改成零拷贝版本&#xff0c;帧率直接飙到28FPS——这个性能提升让我彻底理解了零拷贝的价值。…...

如何用GraphvizOnline在5分钟内创建专业流程图:终极免费可视化工具指南

如何用GraphvizOnline在5分钟内创建专业流程图&#xff1a;终极免费可视化工具指南 【免费下载链接】GraphvizOnline Lets Graphviz it online 项目地址: https://gitcode.com/gh_mirrors/gr/GraphvizOnline 还在为复杂的图表绘制工具而烦恼吗&#xff1f;GraphvizOnlin…...

GD32 USB从机硬件设计避坑指南:F303/E503的1.5K电阻和F4xx的VBUS直连到底怎么选?

GD32 USB从机硬件设计避坑指南&#xff1a;F303/E503的1.5K电阻和F4xx的VBUS直连到底怎么选&#xff1f; 在嵌入式硬件设计中&#xff0c;USB接口的实现往往看似简单&#xff0c;实则暗藏玄机。尤其是面对GD32不同系列芯片时&#xff0c;设计工程师常常陷入"1.5K上拉电阻…...

YOLOv8头部改进全攻略:从SEAM到MultiSEAM的代码实现与效果对比

YOLOv8头部改进全攻略&#xff1a;从SEAM到MultiSEAM的代码实现与效果对比 在目标检测领域&#xff0c;YOLO系列模型因其卓越的实时性能而广受欢迎。YOLOv8作为最新一代的代表&#xff0c;其头部结构的设计直接影响着检测精度与速度。本文将深入探讨两种创新性头部改进方案——…...

SDMatte效果展示:细碎边缘无断裂+透明区域灰度渐变真实

SDMatte效果展示&#xff1a;细碎边缘无断裂透明区域灰度渐变真实 1. 专业级抠图效果展示 SDMatte 作为一款专注于高质量图像抠图的AI模型&#xff0c;在处理复杂边缘和透明物体方面展现出惊人的专业级效果。让我们通过几个典型案例&#xff0c;看看它在实际应用中的表现。 …...

九,附录 B:响应周期公式

九&#xff0c;附录 B&#xff1a;响应周期公式九&#xff0c;附录 B&#xff1a;响应周期公式九&#xff0c;附录 B&#xff1a;响应周期公式 A2B_RESPCYCS 寄存器用于设置从控制帧&#xff08;SCF&#xff09;开始到最后一个从节点用响应帧&#xff08;SRF&#xff09;进行响…...

AI软件研发成本飙升的真相:3个被忽视的隐性成本源,今天不查明天多烧47%预算!

第一章&#xff1a;AI原生软件研发成本优化实战技巧 2026奇点智能技术大会(https://ml-summit.org) AI原生软件的研发成本常被模型训练开销主导&#xff0c;但实际可观测的浪费更多来自推理服务冗余、提示工程低效、以及缺乏细粒度资源编排。聚焦可落地的降本路径&#xff0c;…...

【R 4.5大数据处理性能跃迁指南】:20年实战验证的7大底层优化策略(含benchmark实测提升3.8×)

第一章&#xff1a;R 4.5大数据处理性能跃迁的核心动因与基准定位R 4.5 版本在底层内存管理、向量化执行引擎及并行调度机制上实现了结构性升级&#xff0c;显著提升了大规模数据集&#xff08;GB级及以上&#xff09;的加载、聚合与建模效率。其核心动因并非单一优化&#xff…...

Buildroot外部工具链路径解析:从权限问题到正确配置

1. Buildroot外部工具链路径问题解析 第一次用Buildroot配置外部工具链时&#xff0c;我遇到了一个典型的路径解析问题。当时选择的工具链路径是/opt/cross-toolchain/bin/arm-linux-gnueabihf-gcc&#xff0c;编译过程中却报错提示找不到libgcc_s.so。这种问题看似简单&#x…...

Git-RSCLIP优化技巧:英文标签这样写,遥感图像分类准确率更高

Git-RSCLIP优化技巧&#xff1a;英文标签这样写&#xff0c;遥感图像分类准确率更高 1. 为什么标签描述如此重要 在遥感图像分类任务中&#xff0c;标签描述的质量直接影响Git-RSCLIP模型的分类准确率。与通用图像分类不同&#xff0c;遥感图像包含大量专业地物特征&#xff…...