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

news/2024/9/1 2:31:33 标签: 设计模式

定义

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

C++实现

class Library {
public:
	virtual ~Library() {}
	// template method
	void 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();
}

类图

请添加图片描述

对比类图和C++实现,其中TemplateMethod就是模板方法,它是子类可以复用的算法结构。对于特定步骤step1、step2他们都是变化的,所以延迟到子类进行实现。

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

http://www.niftyadmin.cn/n/5561693.html

相关文章

简单讲讲为什么大模型会回答9.11大于9.9

目录 问题的由来国外大模型的表现国产大模型的表现错误原因分析 今天我们来聊聊一个上了热搜的问题,这个问题看似简单,却让不少 AI 大模型“翻车”的问题:9.11 和 9.9,哪个大? 问题的由来 这个问题最初是由一位名叫 Ri…

【Python实战因果推断】41_合成控制1

目录 Online Marketing Dataset 在之前了解了面板数据在因果识别方面的优势。也就是说,你不仅可以比较单位之间的关系,还可以比较单位的前世今生,这样你就可以用更可信的假设来估计反事实 。您还了解了差分法(DID)及其…

基于AT89C51单片机的多功能自行车测速计程器(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于AT89C51单片机的多功能自行车测速计程器的详情介绍,如果对您有帮助的话,还请关注一下哦,如果有资源方面的需要可以联系我。 目录 选题背景 原理图 PCB图 仿真图 代码 系统论文 资源下载 选题背景 美丽的夜晚&…

js实现无限滚动加载数据

传统的实现方法是监听到scroll事件,调用目标元素的getBoundingClientRect()方法,获取它相对于视口左上角的坐标,然后判断是否在视口内。缺点在于由于scroll事件频繁触发,计算量较大,容易导致性能问题。 IntersectionO…

全局 loading

好久不见! 做项目中一直想用一个统一的 loading 状态控制全部的接口加载,但是一直不知道怎么处理,最近脑子突然灵光了一下想到了一个办法。 首先设置一个全局的 loading 状态,优先想到的就是 Pinia 然后因为页面会有很多接口会…

21天学通C++:第十三、十四章节

第十三章:类型转换运算符 类型转换是一种机制,让程序员能够暂时或永久性改变编译器对对象的解释。注意,这并不意味着程序员改变了对象本身,而只是改变了对对象的解释。可改变对象解释方式的运算符称为类型转换运算符。 为何需要…

Spring Boot请求参数映射:@RequestBody、@RequestParam和@RequestPart的应用

文章目录 引言I @RequestBody(接收请求体中的数据)1.1 简介1.2 签名II @RequestParam(接收任意类型的参数)3.1 接收文件类型参数和普通查询参数3.1 只接收文件参数III @RequestPart(接收文件类型参数)3.1 普通文件上传3.2 上传多个属性名相同的文件3.3 上传一个图片和一个文…

少儿编程启蒙宝典:Scratch动画游戏108变

一、编程教育的时代价值与意义 随着数字时代的深入发展,社会对人才的需求正发生深刻变革,计算思维与编程能力已成为衡量个人竞争力的重要指标。在此背景下,培养孩子们运用计算思维解决实际问题的能力,成为教育领域的重要任务。编…