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

运行结果

相关推荐
陌上丨15 分钟前
优雅终止线程的设计模式
设计模式
梦游钓鱼15 分钟前
stl常用容器说明
开发语言·c++
WBluuue23 分钟前
Codeforces 1088 Div1+2(ABC1C2DEF)
c++·算法
像素猎人32 分钟前
map<数据类型,数据类型> mp和unordered_map<数据类型,数据类型> ump的讲解,蓝桥杯OJ4567最大数目
c++·算法·蓝桥杯·stl·map
张涛酱10745632 分钟前
Agent Skills 深入解析:构建可插拔的智能体知识体系
spring·设计模式·ai编程
Kel33 分钟前
CrewAI v1.14.2 双模式架构深度剖析:当角色协作遇上事件驱动
人工智能·设计模式·架构
沐雪轻挽萤44 分钟前
1. C++17新特性-序章
java·c++·算法
郝学胜-神的一滴1 小时前
从链表到二叉树:树形结构的入门与核心性质解析
数据结构·c++·python·算法·链表
玖釉-1 小时前
深入解析 meshoptimizer:基于 meshopt_computeSphereBounds 的层级包围球构建与 DAG 优化
c++·算法·图形渲染
wuxinyan1231 小时前
Java面试题48:一文深入了解java设计模式
java·设计模式·面试