模板方法原理与C++实现

定义

定义一个操作中的算法骨架(稳定的),而将一些步骤的实现延迟到子类中(变化的)。模板方法使得子类可以复用一个算法的结构,而只改变(重写)这个算法的特定步骤。

C++实现

class Library {
public:virtual ~Library() {}// template methodvoid run() {step1();step2();step3();}
protected:virtual void step1() = 0;virtual void step2() = 0;void step3() {// stable method, do something}
};class ConcretLibrary : public Library{
protected:void step1() {// do something}void step2(){// do something}
};void main()
{ConcretLibrary lb;lb.run();
}

类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mfIEOksW-1721039195312)(https://i-blog.csdnimg.cn/direct/676bcc6d56fb41649c19b8751f47aad2.png)]
对比类图和C++实现,其中TemplateMethod就是模板方法,它是子类可以复用的算法结构。对于特定步骤step1、step2他们都是变化的,所以延迟到子类进行实现。

总结
  • 模板方法是一种非常实用且常见的设计模式,它使用简单的机制(虚函数)为应用程序框架提供了灵活的扩展点。
  • 模板方法中被模板方法调用的虚函数可以有具体实现,也可以没有任何实现(纯虚函数),但一般访问权限为protected,因为作为算法的一部分,它没有对外单独开放的必要。

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

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

相关文章

ns3-gym入门(二):linear-mesh例子详解

一、问题背景:Random Access Controlling the random access in an IEEE 802.11 mesh network is challenging as the network nodes compete for the shared radio resources. It is known that assigning the same channel access probability to each node is no…

无人机之机架类型篇

碳纤维机架 具有低密度、高强度和高刚度的特点,非常适合商业或工业级无人机的设计。碳纤维机架在飞行过程中具有良好的减振效果,使飞行更加稳定,但制作工艺复杂,成本较高。 工程塑料机架 以其轻便、耐冲击和易加工等特点受到一…

Vue 3 组件通信与状态管理:从基础到Pinia的全面解析

引言 Vue 3引入了Composition API,这为组件通信提供了更多的灵活性和强大的功能。例如,使用provide和inject可以轻松实现跨层级组件的数据传递,而setup函数则为组件提供了更早的生命周期钩子,使得在组件初始化阶段就能进行通信设…

Chrome调试工具

一、Chrome调试工具 1.Ctrl滚轮 可以放大开发者工具代码大小。 2.左边是 HTML 元素结构,右边是 CSS 样式。 3.右边 CSS 样式可以改动数值(左右箭头或者直接输入)和查看颜色。 4.Ctrl 0 复原浏览器大小。 5.如果点击元素,发现右侧…

Netfilter之连接跟踪(Connection Tracking)和反向 SNAT(Reverse SNAT)

连接跟踪(Connection Tracking) 连接跟踪是 Netfilter 框架中的一个功能,用于跟踪网络连接的状态和元数据。它使防火墙能够识别和处理数据包属于哪个连接,并在双向通信中正确匹配请求和响应数据包。 工作原理 建立连接&#xf…

微服务节流控制:Eureka中服务速率限制的精妙配置

微服务节流控制:Eureka中服务速率限制的精妙配置 在微服务架构中,服务的可用性和稳定性对于整个系统的性能至关重要。Eureka作为Netflix开源的服务发现框架,虽然主要用于服务注册与发现,但合理地配置服务的速率限制也是确保服务健…

【C语言】深入解析选择排序

文章目录 什么是选择排序?选择排序的基本实现代码解释选择排序的优化选择排序的性能分析选择排序的实际应用结论 在C语言编程中,选择排序是一种简单且直观的排序算法。尽管它在处理大型数据集时效率不高,但由于其实现简单,常常用于…

基于协同过滤混合算法的餐饮推荐系统设计与实现

基于协同过滤混合算法的餐饮推荐系统设计与实现 Design and Implementation of Restaurant Recommendation System Based on Hybrid Collaborative Filtering Algorithm 完整下载链接:基于协同过滤混合算法的餐饮推荐系统设计与实现 文章目录 基于协同过滤混合算法的餐饮推荐…

牛客TOP101:反转链表

文章目录 1. 题目描述2. 解题思路3. 代码实现 1. 题目描述 2. 解题思路 简单粗暴的写法,就是从头到尾挨个将所有结点的指向翻转即可。需要注意的是,翻转之后会失去原有指向的结点,所以需要提前保存。   具体做法就是,使用cur标记…

面试必备!Redis面试题合集

目录 1.Redis简介 2. 分布式缓存常见的技术选型方案有哪些? 3. 说一下 Redis 和 Memcached 的区别和共同点 4. 缓存数据的处理流程是怎样的? 5. 为什么要用 Redis/为什么要用缓存? 6. Redis 常见数据结构以及使用场景分析 6.1. string 6.2. list 6.3. hash 6.4. s…

Spring源码注解篇二:手写@Component注解

Component注解的功能 在Spring框架中,Component 注解是一个核心特性,用于自动检测类并将其注册为Spring应用上下文中的Bean。这大大简化了Bean的配置过程,使得开发者能够通过注解的方式快速地将类标记为组件,并由Spring容器进行管…

硬件检测工具 | CPU-Z v2.10.0 官方中文绿色版

软件简介 CPU-Z是一款广受欢迎的硬件检测工具,主要用于收集电脑处理器的详细信息。这款软件能够提供关于CPU的详细数据,包括处理器名称、编号、代号、进程和缓存等信息。此外,CPU-Z还能实时监测每个内核的内部频率和内存频率,以及…

【洛谷B3644】【模板】拓扑排序 / 家谱树 解题报告

洛谷B3644 - 【模板】拓扑排序 / 家谱树 题目描述 有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。给出每个人的后代的信息。输出一个序列,使得每个人的后辈都比那个人后列出。 输入格式 第 1 1 1 行一个整数 N N N&#xf…

Java字节流的输入输出

Java字节流的输入输出指的是使用Java中的字节流来进行数据的读取和写入操作。字节流是以字节为单位进行读写操作的,常用于处理二进制数据或者字符数据。 Java中常用的字节流类有InputStream和OutputStream。InputStream用于读取字节数据,OutputStream用…

【运维项目经历|037】MFS-Scale分布式对象存储系统部署与优化项目

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 ​ 🏅阿里云ACE认证高级工程师 ​ 🏅阿里云开发者社区专家博主 💊交流社区:CSDN云计算交流社区欢迎您的加入! 目录 项目名称 项目背景 项目目标 …

如何在项目中打印sql和执行的时间

目标:打印DAO方法中sql和执行的时间 一种方式是去实现Mybatis的拦截器Interceptor ,比较麻烦; 这里介绍一种比较简单的实现方式; 1、如何打印sql? 配置文件加这个可以打印出com.zhenhui.ids.busi.watch包下执行的sq…

c++包管理器

conan conan search,查看网络库 conan profile detect,生成缓存信息conan new cmake_exe/cmake_lib,创建cmakelists.txtconan install .,执行Conanfile.txt中的配置,生成相关的bat文件 项目中配置Conanfile.txt(或者…

ImportError: DLL load failed while importing _swigfaiss: 找不到指定的模块。

ImportError: DLL load failed while importing _swigfaiss: 找不到指定的模块 这个错误通常是由于系统中缺少某些必要的动态链接库(DLL)文件,或者由于与当前环境中的库版本不兼容导致的。以下是一些解决这个问题的步骤: 方法一&…

linux高级编程(sqlite数据库调用)

数据库 1、分类: 大型 中型 小型 ORACLE MYSQL/MSSQL SQLITE DBII powdb 关系型数据库 2、名词: DB 数据库 select update database DBMS 数据库管理系统 MIS 管理…

tessy 集成测试:小白入门指导手册

目录 1,创建集成测试模块且分析源文件 2,设置测试环境 3,TIE界面设置相关函数 4,SCE界面增加用例 5,编辑数据 6,用例所对应的测试函数序列 7,添加 work task 函数 8,为测试场景添加函数 9,为函数赋值 10,编辑时间序列的数值 11,执行用例 12,其他注意事项…