作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
一、模板模式是什么?
模板模式是一种行为型的软件设计模式,在父类中定义了一个模板算法,只实现模板中的公共部分,将可变部分放在子类中实现,不同的子类对同一模板有不同的扩展和实现。
模板模式的优点:
- 良好复用性。父类中公共部分可以多次使用,具备好的环境适应性。
- 良好扩展性。子类对父类模板的具体实现作扩展。
- 符合开闭原则。基于模板扩展功能,不需要改动原有代码。
模板模式的缺点:
- 类个数增加。基于模板的每个实现,都要定义一个子类,容易使代码量膨胀。
- 若父类模板有改动,则子类均要同步更改。
二、模板模式
2.1 结构图
客户端即Main主函数,定义好模板框架,具体步骤的实现交给子类完成。
2.2 代码示例
场景描述:我是一个电脑店的老板,给我的徒弟们培训了一个大致的电脑安装教程,徒弟根据不同品牌不同客户的需求,参照我的教程完成安装。
//Template.h
/****************************************************/
#pragma once
#include <iostream>
#include <unordered_map>
#include <vector>
#include <list>
#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;
}
};
//main.cpp
/****************************************************/
#include <iostream>
#include <string>
#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;
}
程序结果如下。
看过我“建造者模式”篇的小伙伴应该会发现,这两篇举的例子都是安装电脑。但是建造者模式中有一个“监工”负责落实建造的具体步骤和顺序,而模板模式中是父类承担了这个职责。
三、总结
我尽可能用较通俗的话语和直观的代码例程,来表述我对模板模式的理解,或许有考虑不周到的地方,如果你有不同看法欢迎评论区交流!希望我举的例子能帮助你更好地理解模板模式。文章来源:https://www.toymoban.com/news/detail-409630.html
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!文章来源地址https://www.toymoban.com/news/detail-409630.html
到了这里,关于设计模式之模板模式(C++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!