模板方法设计模式(C++)

定义

定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override重写)该算法的某些特定步骤。

------《设计模式》GoF

Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。

结构

代码示例

以不同电脑的安装过程为例,代码参考:翟天保Steven

cpp 复制代码
//Template.h
/****************************************************/
#ifndef TEMPLATE_H
#define TEMPLATE_H
#include <iostream>
#include <string>
 
using namespace std;
 
// 定义模板类-电脑
class Computer 
{
public:
	// 装配
	void install() {
		cout << "电脑安装开始。" << endl;
		cout << "电脑品牌为:" << getComputerType() << endl;
		installProcessor();
		installMemory();
		installCaliche();
		cout << "电脑安装结束。" << endl;
	}
 
private:
	// 获取电脑类型
	virtual string getComputerType() = 0;
 
	// 安装处理器
	virtual void installProcessor() = 0;
 
	// 安装内存
	virtual void installMemory() = 0;
 
	// 安装硬盘
	virtual void installCaliche() = 0;
 
};
 
// 实现具体模板类-惠普电脑
class HPComputer : public Computer 
{
private:
	// 获取电脑类型
	virtual string getComputerType() {
		return "惠普";
	}
 
	// 安装处理器
	virtual void installProcessor() {
		cout << "安装处理器:Inter 酷睿i7-1260P" << endl;
	}
 
	// 安装内存
	virtual void installMemory() {
		cout << "安装内存:32GB DDR4-3200MHz" << endl;
	}
 
	// 安装硬盘
	virtual void installCaliche() {
		cout << "安装硬盘:1TB SSD" << endl;
	}
 
};
 
// 实现具体模板类-戴尔电脑
class DellComputer : public Computer 
{
private:
	// 获取电脑类型
	virtual string getComputerType() {
		return "戴尔";
	}
 
	// 安装处理器
	virtual void installProcessor() {
		cout << "安装处理器:Inter 酷睿i7-1265U" << endl;
	}
 
	// 安装内存
	virtual void installMemory() {
		cout << "安装内存:16GB DDR4-3200MHz" << endl;
	}
 
	// 安装硬盘
	virtual void installCaliche() {
		cout << "安装硬盘:512GB SSD" << endl;
	}
};

#endif
cpp 复制代码
//test.cpp
/****************************************************/
#include "Template.h"
 
using namespace std;
 
int main() 
{
	Computer *computerA = new HPComputer();
	Computer *computerB = new DellComputer();
 
	computerA->install();
	cout << endl;
	computerB->install();
 
	delete computerA;
	delete computerB;
	computerA = nullptr;
	computerB = nullptr;
 
	return 0;
}

运行结果

相关推荐
史迪奇_xxx1 小时前
10、一个简易 vector:C++ 模板与 STL
java·开发语言·c++
我是华为OD~HR~栗栗呀3 小时前
华为od-21届考研-C++面经
java·c语言·c++·python·华为od·华为·面试
oioihoii3 小时前
C++ 中的类型转换:深入理解 static_cast 与 C风格转换的本质区别
java·c语言·c++
小妖6663 小时前
vscode 怎么运行 c++ 文件
开发语言·c++
lingran__3 小时前
算法沉淀第三天(统计二进制中1的个数 两个整数二进制位不同个数)
c++·算法
ShareBeHappy_Qin3 小时前
Spring 中使用的设计模式
java·spring·设计模式
小冯记录编程4 小时前
深入解析C++ for循环原理
开发语言·c++·算法
磨十三5 小时前
C++ 容器详解:std::list 与 std::forward_list 深入解析
开发语言·c++·list
今麦郎xdu_5 小时前
【Linux系统】命令行参数和环境变量
linux·服务器·c语言·c++
情深不寿3177 小时前
C++特殊类的设计
开发语言·c++·单例模式