模板方法设计模式(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;
}

运行结果

相关推荐
coding者在努力9 分钟前
算法竞赛中根据数据规模猜测算法
c++·算法·stl·时间复杂度
love530love13 分钟前
ComfyUI-3D-Pack:Windows 下手动编译 mesh_inpaint_processor C++ 加速模块
c++·人工智能·windows·python·3d·hunyuan3d·comfyui-3d-pack
楼田莉子20 分钟前
C++高并发内存池:内存池调优与测试
c++·后端·哈希算法·visual studio
han_29 分钟前
JavaScript设计模式(二):策略模式实现与应用
前端·javascript·设计模式
雾隐潇湘31 分钟前
C++——第三篇 继承与多态
开发语言·c++
阿贵---33 分钟前
分布式系统C++实现
开发语言·c++·算法
不染尘.34 分钟前
最短路径之Bellman-Ford算法
开发语言·数据结构·c++·算法·图论
Reisentyan35 分钟前
[Refactor]CPP Learn Data Day 1
c++·重构
xiaoye-duck36 分钟前
C++ STL set 系列深度解析:从底层原理、核心接口到实战场景
开发语言·c++·stl
m0_6625779739 分钟前
C++中的RAII技术深入
开发语言·c++·算法