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

运行结果

相关推荐
高晶3 小时前
CANopen 在 BMS 系统中的 C 语言实战指南
设计模式·程序员
weixin_307779133 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
AI wins3 小时前
c++新增頭文件
c++
Shadow(⊙o⊙)3 小时前
仿muduo实现高并发服务器——事件就绪管理Channel.hpp
服务器·c++
by209994 小时前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
博风4 小时前
13、设计模式应用举例:工厂方法模式:创建药品对象
设计模式·工厂方法模式
音草4 小时前
C++ 继承详解:从概念到菱形继承
c++
weixin_307779135 小时前
C++代码实现MATLAB中的spectralcluster函数功能
开发语言·c++·算法·matlab
xiaoye-duck5 小时前
《C++ 项目:手写大模型接入 SDK》Trae IDE 开发环境搭建与依赖管理
c++·ide·语言模型
沫璃染墨6 小时前
《Qt从零入门系列(十四):QThread多线程详解——从线程创建到客户端阻塞处理》
开发语言·c++·笔记·qt·ui·交互·线程