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

运行结果

相关推荐
感哥9 小时前
C++ 面向对象
c++
晨米酱11 小时前
JavaScript 中"对象即函数"设计模式
前端·设计模式
沐怡旸11 小时前
【底层机制】std::shared_ptr解决的痛点?是什么?如何实现?如何正确用?
c++·面试
数据智能老司机16 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机17 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机17 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机17 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
使一颗心免于哀伤17 小时前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
感哥17 小时前
C++ STL 常用算法
c++
saltymilk1 天前
C++ 模板参数推导问题小记(模板类的模板构造函数)
c++·模板元编程