定义
定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override重写)该算法的某些特定步骤。
——《设计模式》GoF
Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
结构
代码示例
以不同电脑的安装过程为例,代码参考:翟天保Steven
//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
//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;
}
运行结果