定义
定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。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;
}
运行结果