设计模式之模板模式(C++)

news/2024/11/20 4:56:32/

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

一、模板模式是什么?

       模板模式是一种行为型的软件设计模式,在父类中定义了一个模板算法,只实现模板中的公共部分,将可变部分放在子类中实现,不同的子类对同一模板有不同的扩展和实现。

       模板模式的优点:

  1. 良好复用性。父类中公共部分可以多次使用,具备好的环境适应性。
  2. 良好扩展性。子类对父类模板的具体实现作扩展。
  3. 符合开闭原则。基于模板扩展功能,不需要改动原有代码。

      模板模式的缺点:

  1. 类个数增加。基于模板的每个实现,都要定义一个子类,容易使代码量膨胀。
  2. 若父类模板有改动,则子类均要同步更改。

二、模板模式

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;
}

       程序结果如下。

       看过我“建造者模式”篇的小伙伴应该会发现,这两篇举的例子都是安装电脑。但是建造者模式中有一个“监工”负责落实建造的具体步骤和顺序,而模板模式中是父类承担了这个职责。

三、总结

       我尽可能用较通俗的话语和直观的代码例程,来表述我对模板模式的理解,或许有考虑不周到的地方,如果你有不同看法欢迎评论区交流!希望我举的例子能帮助你更好地理解模板模式。

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!


http://www.ppmy.cn/news/40925.html

相关文章

【数据结构学习3】线性表-链表、单链表

目录链式存储结构链表概念头结点的意义单链表的定义和表示单链表的基本操作链式存储结构 链表概念 概念 结点在存储器中的位置是任意的&#xff0c;即逻辑上相邻的数据元素在物理上不一定相邻。线性表的链式表示又称为非顺序映像或链式映像用一组物理位置任意的存储单元来存…

Java 管道 (学习代码)

目录 上代码&#xff1a; 输出&#xff1a; 执行流程可以总结如下&#xff1a; 上代码&#xff1a; package cn.net.cdsz.ccb.test;import java.io.IOException; import java.io.PipedReader; import java.io.PipedWriter;public class test {static class ReaderThread imp…

阿里云产品试用更新,产品组合试用装更划算,快来免费上云吧

最近阿里云产品又上新了&#xff0c;尤其是推出了最新的产品组合试用装&#xff0c;个人觉得阿里云关于云产品的更新迭代是非常重视的&#xff0c;而且每次推出的产品不仅会惊艳到用户&#xff0c;而且产品功能也是随着一次迭代而更加完善、强大。前段时间也写了一篇关于为什么…

多维时序 | MATLAB实现CNN-LSTM-Attention多变量时间序列预测

多维时序 | MATLAB实现CNN-LSTM-Attention多变量时间序列预测 目录多维时序 | MATLAB实现CNN-LSTM-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现CNN-LSTM-Attention多变量时间序列预测&#xff0c;CNN-LSTM结合注意力机制…

【软件安装】图数据库_Neo4j下载与安装配置详解

【软件安装】图数据库_Neo4j安装下载详解 文章目录【软件安装】图数据库_Neo4j安装下载详解1. 前言2. 下载Neo4j3. 安装 配置3.1 解压3.2 配置4. 启动Neo4j5. 参考1. 前言 因为使用Neo4j时默认是需要java-jdk的支持&#xff0c;因此在下载neo4j之前&#xff0c;需要下载jdk&a…

有限元基础编程-何晓明老师课件-一维程序实现matlab

文章目录前言一、主程序二、一维有限元求解程序-框架三、组装刚度矩阵assemble_matrix_from_1D_integral.m2.1 算法2.2 get_standard_gauss_1D.m2.3 get_Gauss_local_1D.m前言 只是为方便学习&#xff0c;不做其他用途&#xff0c;课程理论学习来自b站视频有限元基础编程-何晓明…

软件测试别再说简历项目不会写了,给你安排的明明白白

目录 个人信息 职业技能 工作经历 项目经历 工作经历 项目经历 教育经历 自我评价 个人信息 姓 名&#xff1a;xxx 性 别&#xff1a;女 手 机&#xff1a;xxxxxxxxxxxx 最高学历&#xff1a;统招硕士 工作年限&#xff1a;3 年 职…