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

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

模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的框架,将特定步骤的实现延迟到子类中。模板方法模式通过在父类中定义算法的骨架,而将具体步骤的实现留给子类来完成,从而使子类可以重新定义算法的特定步骤而不改变算法的整体结构。

在模板方法模式中,通常会包含两种角色:

  1. 抽象类(Abstract Class):定义了一个模板方法,其中包含算法的框架和具体步骤的声明,可以包含具体方法、抽象方法或钩子方法。

  2. 具体子类(Concrete Subclass):实现了抽象类中的具体步骤,完成算法的具体实现。

// 抽象类
class AbstractClass {
public:// 模板方法void templateMethod() {step1();step2();step3();}// 具体步骤的声明virtual void step1() = 0;virtual void step2() = 0;virtual void step3() = 0;
};// 具体子类
class ConcreteClass : public AbstractClass {
public:void step1() override {std::cout << "Step 1" << std::endl;}void step2() override {std::cout << "Step 2" << std::endl;}void step3() override {std::cout << "Step 3" << std::endl;}
};int main(int argc, char *argv[])
{ConcreteClass concrete;// 使用模板方法concrete.templateMethod();return 0;
}/*
在这个示例中,AbstractClass 是抽象类,其中定义了模板方法 templateMethod(),该方法包含了算法的框架和具体步骤的声明。ConcreteClass 是具体子类,它实现了抽象类中的具体步骤。通过模板方法模式,我们可以在父类中定义算法的整体结构,而将具体实现延迟到子类中。这样可以使得子类可以根据需要重新定义特定步骤,同时保持算法的一致性。
*/

觉得有帮助的话,打赏一下呗。。

           

相关文章:

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

模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个算法的框架&#xff0c;将特定步骤的实现延迟到子类中。模板方法模式通过在父类中定义算法的骨架&#xff0c;而将具体步骤的实现留给子类来完成&#xff0c;从而使子类…...

新model开发记录

模型使用 -- 用blender导出为 fbx &#xff0c;修改渲染方式&#xff08;点击模型->Materials->Extract Materials(将材质从fbx中 单独提取出来了)->Materials 选择 Shader -> SimpleURPToonLitExample 点开脸的材质&#xff0c;勾选第一条&#xff09; 解决角色…...

ARMday1

1.总结keil5下载代码和编译代码需要注意的事项 答&#xff1a;下载代码时&#xff0c;确保stlink的驱动有效、魔术棒中硬件型号的连接 编译代码时&#xff0c;先将配置魔术棒里Debug中的Setting&#xff0c;将Flash中Reset and Run勾选上&#xff0c;并去除pack中的Enab…...

【C++风云录】创造视觉奇迹:探索C++图形编程的魅力与可能性

图形与界面&#xff1a;从SFML到Allegro&#xff0c;探索C图形编程的世界 前言 随着计算机图形技术和界面设计的快速发展&#xff0c;图形编程在软件开发中变得越来越重要。C作为一种功能强大的编程语言&#xff0c;为开发人员提供了丰富的图形编程工具和库。本文将介绍几个流…...

常见的Nginx+Redis+MQ+DB架构设计

三高&#xff0c;复杂的架构 SQRS CAP 缓存&#xff0c;限流 【Redis&#xff0c;缓存】 cache-aside 缓存cache&#xff1a;数据源的副本 store 1. Read/Write Through Pattern 读写穿透模式 redis&#xff1a;放当前在线用户&#xff0c;热点数据...

vue+elementUI搭建动态表头的表格

前提&#xff1a;以下代码是vue2项目结合elementUi完成的 数据结构 后端传来的数据是两个list&#xff0c;一个表头的list&#xff0c;一个表格内容的list // 表头 headTableAtts: [{ columnLabel: 姓名, columnName: name },{ columnLabel: 年龄, columnName: age },{ colu…...

【ENSP】交换机和交换机之间实现静态路由

1.概念 三层交换机只能在Vlanif逻辑口配置iP地址 2.实现方法 交换机允许对应vlan通行&#xff0c;配置vlanif的ip地址&#xff0c;做静态路由 3.静态路由配置方法 ip route-static 目的网段 子网掩码 下一跳设备 LSW1三层交换机配置 u t m sys vlan batch 10 20 …...

2024.2.18力扣每日一题——N叉树的前序遍历

2024.2.18 题目来源我的题解方法一 深度优先遍历&#xff08;递归方式&#xff09;方法二 迭代方式&#xff08;栈实现&#xff09; 题目来源 力扣每日一题&#xff1b;题序&#xff1a;589 我的题解 方法一 深度优先遍历&#xff08;递归方式&#xff09; 与二叉树的前序遍…...

Taro活动列表中,对某一个活动添加分享按钮

采用data-留下分享链接的拼接参数 1.在item文件中写按钮 openType“share” <ButtonclassName{classes.rowRightShareButton}openType"share"data-share-transfer-id{lastGiftingTransferId}data-share-picture-url{shareUrl}data-share-title{shareTitle}onClic…...

深入理解计算机系统 家庭作业 2.65

/* 异或运算可以把同为1时变成0。 */ #include <stdio.h> #include <stdlib.h> int odd_ones(unsigned x); int main(void) { int x0xF00000016; printf("x的奇数位:%d",odd_ones(x)); return 0; } int odd_ones(unsigned x) { char…...

Java字节码

Java Agent概述 Java Agent是一种特殊类型的软件组件&#xff0c;它允许在Java虚拟机&#xff08;JVM&#xff09;运行时修改应用程序的字节码。这种技术通常用于性能监控、日志记录、系统调试等。Java Agent主要分为两类&#xff1a; 1. 启动时加载的Agent&#xff08;Pre-Ma…...

深入解析大数据体系中的ETL工作原理及常见组件

** 引言 关联阅读博客文章&#xff1a;探讨在大数据体系中API的通信机制与工作原理 关联阅读博客文章&#xff1a;深入理解HDFS工作原理&#xff1a;大数据存储和容错性机制解析 ** 在当今数字化时代&#xff0c;大数据处理已经成为了企业成功的重要组成部分。而在大数据处…...

条件变量的简易C++实现版

条件变量通常与互斥锁一起使用&#xff0c;用于线程间的同步。以下是条件变量常用的一些函数&#xff1a; ①std::condition_variable::wait(lock, pred)&#xff1a;线程调用此函数时&#xff0c;会原子性地释放锁并阻塞当前线程&#xff0c;等待另一个线程调用 notify_one 或…...

目标检测评价标准

主要借鉴&#xff1a;https://github.com/rafaelpadilla/Object-Detection-Metrics?tabreadme-ov-file 主要评价指标、术语&#xff1a; Intersection Over Union (IOU)&#xff1a;两个检测框交集面积与并集面积的比值 True Positive (TP)&#xff1a;IOU大于阈值的检测框…...

C51-- 蓝牙,WIFI模块

HC-08蓝牙模块: 蓝牙 -- 最好用的 串口透传 模块 透传 -- 透明传送&#xff0c;指的是在数据传输的过程中&#xff0c;通过无线的方式这组数据不发生任何形式的改变&#xff0c; 仿佛传输过程是透明的&#xff0c;同时保证传输质量&#xff0c;最终原封不动的传送到接收者手…...

HN热帖|替换Redis的一场赛跑

3 月 21 日&#xff0c; Redis Ltd. 宣布了一项重大决定&#xff1a;Redis “内存数据存储”项目从 Redis 7.4 版本开始将以非自由的、源代码可用的许可证发布。这一消息并不受欢迎&#xff0c;但也并非完全意外。这次的变化的不同寻常之处是市面上已经有了多个 Redis 替代品可…...

Kubernetes(k8s):网络插件之Calico安装与详解

Kubernetes&#xff08;k8s&#xff09;&#xff1a;网络插件之Calico安装与详解 1、什么是Calico&#xff1f;2、安装和配置Calico&#xff08;控制节点-master执行&#xff09;3、配置网络策略4、 Calico 的 yaml 文件部分详解1、ConfigMap配置2、DaemonSet 配置 5、calico-k…...

Chrome base 库详解:工具类和常用类库

Chrome浏览器使用了一个强大的库名为base&#xff0c;它包括了许多工具类和常用类库&#xff0c;以支持Chrome的底层功能和性能优化。在本文中&#xff0c;我们将详细阐述base库中的每个子项&#xff0c;并提供示例代码来展示其用法。 base 库的基本结构 Chrome的base库是一个…...

Nginx开发实战三:替换请求资源中的固定数据

文章目录 1.效果预览2.下载Nginx解压并初始化3.字符串替换模块安装4.修改nginx配置文件并重启 1.效果预览 页面初始效果 页面替换后效果 说明:页面是内网的一个地址&#xff0c;我们通过nginx可以很便捷的将其改为外网访问&#xff0c;但是在外网访问这个地址后&#xff0c…...

如何在Python中实现多线程和多进程?

如何在Python中实现多线程和多进程&#xff1f; 在Python中&#xff0c;多线程和多进程是实现并发编程的两种主要方式。它们各自有其特点和适用场景。下面将分别介绍如何在Python中实现多线程和多进程&#xff0c;并探讨它们的优缺点。 一、多线程 Python的标准库提供了thre…...

RPA-Python与pytest-arangodb集成:10步实现ArangoDB测试自动化完整指南

RPA-Python与pytest-arangodb集成&#xff1a;10步实现ArangoDB测试自动化完整指南 【免费下载链接】RPA-Python Python package for doing RPA 项目地址: https://gitcode.com/gh_mirrors/rp/RPA-Python RPA-Python是一个强大的Python机器人流程自动化工具包&#xff0…...

如何快速恢复丢失的Ren‘Py游戏源码:Unrpyc终极反编译指南

如何快速恢复丢失的RenPy游戏源码&#xff1a;Unrpyc终极反编译指南 【免费下载链接】unrpyc A renpy script decompiler 项目地址: https://gitcode.com/gh_mirrors/un/unrpyc 你是否曾经遇到过精心制作的RenPy游戏源代码意外丢失&#xff0c;只剩下编译后的.rpyc文件&…...

Windows HEIC缩略图终极指南:3分钟让iPhone照片在Windows完美预览

Windows HEIC缩略图终极指南&#xff1a;3分钟让iPhone照片在Windows完美预览 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你是不是…...

新手福音:通过快马平台生成带注释的nap自动化运维脚本快速入门

作为一个刚接触网络自动化运维的新手&#xff0c;第一次看到"深圳网络自动化运维nap"这个概念时&#xff0c;整个人都是懵的。各种专业术语、复杂的协议和库让我望而却步&#xff0c;直到发现了InsCode(快马)平台&#xff0c;才真正找到了入门的好方法。 为什么选择n…...

建行江门市分行:量身定制金融策 陈皮产业绽新姿

“前期承包土地、购买柑苗已投入大量资金&#xff0c;后续还要设法购买化肥。”眼看资金接续不上&#xff0c;前期投入面临打水漂&#xff0c;流动资金短缺让江门新会某陈皮庄园负责人老李一筹莫展。 获悉老李困境后&#xff0c;建行广东江门分行网点客户经理驱车前往果园实地走…...

luci-app-unblockneteasemusic技术指南:解决网易云音乐播放限制问题

luci-app-unblockneteasemusic技术指南&#xff1a;解决网易云音乐播放限制问题 【免费下载链接】luci-app-unblockneteasemusic [OpenWrt] 解除网易云音乐播放限制 项目地址: https://gitcode.com/gh_mirrors/lu/luci-app-unblockneteasemusic 一、问题导向&#xff1a…...

Qwen3-0.6B-FP8惊艳效果:Qwen3-0.6B-FP8在中文法律条文理解任务中表现优异

Qwen3-0.6B-FP8惊艳效果&#xff1a;在中文法律条文理解任务中表现优异 最近&#xff0c;我在测试一个非常有意思的模型——Qwen3-0.6B-FP8。你可能听说过各种大模型&#xff0c;但这个模型有点特别&#xff0c;它是个“小个子”&#xff0c;却想在“大任务”上证明自己。我把…...

路径规划算法技术选型与实战指南:从理论到工程落地

路径规划算法技术选型与实战指南&#xff1a;从理论到工程落地 【免费下载链接】PathPlanning Common used path planning algorithms with animations. 项目地址: https://gitcode.com/gh_mirrors/pa/PathPlanning 当仓库机器人在密集货架间灵活避障&#xff0c;当无人…...

探索电池2RC等效电路模型:从参数辨识到SOC估计

电池2RC等效电路模型&#xff0c;最小二乘法参数辩识&#xff0c;电池端电压误差小&#xff0c;扩展卡尔曼估计SOC精度高。 有文档&#xff0c;数据&#xff0c;视频&#xff0c;仿真图。在电池研究领域&#xff0c;准确建模和参数估计对于理解电池行为至关重要。今天咱就唠唠电…...

Matlab 实现 DES 与 RSA 双重加密及可视化界面搭建

基于matlab上的DES和RSA两种算法的双重加密&#xff0c;附带显示界面&#xff0c;可更改DES密钥&#xff0c;明文消息&#xff08;在显示界面中&#xff09;&#xff0c;可在代码中更改RSA对应的p&#xff0c;q&#xff0c;e等数据&#xff0c;代码可附加注释和对应要求修改。在…...