10.模板方法模式

news2024/11/29 6:30:31

模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

一 模板方法模式练习-试卷

UML图

在这里插入图片描述

测试代码

#include <iostream>
using namespace std;
 
class TestPaper
{
public:
    void question2(){
        cout << "试题2" << endl;
        cout << "答案:" << answer2() << endl;
    }
    void question1(){
        cout << "试题1" << endl;
        cout << "答案:" << answer1() << endl;
    }
    virtual string answer1() = 0;
    virtual string answer2() = 0;
};
 
class TestPaperA:public TestPaper
{
public:
    virtual string answer1(){
        return "a";
    }
    virtual string answer2(){
        return "a";
    }
};
 
class TestPaperB:public TestPaper
{
public:
    virtual string answer1(){
        return "b";
    }
    virtual string answer2(){
        return "b";
    }
};
 
int main(void)
{
    cout << "学生a的试卷:" << endl;
    TestPaper *a = new TestPaperA();
    a->question1();
    a->question2();
 
    cout << "学生b的试卷:" << endl;
    TestPaper *b = new TestPaperB();
    b->question1();
    b->question2();
    return 0;
}

二、模板方法模式

UML

在这里插入图片描述
在这里插入图片描述

代码

#include <iostream>
using namespace std;
 
class communication
{
public:
    void process(){
        read();
        write();
    }
    virtual int read() = 0;
    virtual int write() = 0;
};
class uart:public communication
{
public:
    int read(){
        cout << "读串口" << endl;
        return 0;
    }
    int write(){
        cout << "写串口" << endl;
        return 0;
    }
};
class tcp:public communication
{
public:
    int read(){
        cout << "读tcp" << endl;
        return 0;
    }
    int write(){
        cout << "写tcp" << endl;
        return 0;
    }
};
class udp:public communication
{
public:
    int read(){
        cout << "读udp" << endl;
        return 0;
    }
    int write(){
        cout << "写udp" << endl;
        return 0;
    }
};
 
 
int main(void)
{
    communication *u = new uart();
    communication *t = new tcp();
    communication *d = new udp();
    u->process();
    t->process();
    d->process();
    return 0;
}

运行结果:

读串口
写串口
读tcp
写tcp
读udp
写udp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1028203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

红帽社区论坛

https://access.redhat.com/ https://access.redhat.com/ 是红帽公司的官方网站&#xff0c;提供了许多与红帽企业级Linux发行版及其他开源软件相关的服务和资源。以下是该网站的一些主要功能&#xff1a;文档和知识库&#xff1a;提供了关于红帽产品的详细文档、手册、技术文章…

Blender 学习笔记(一)

文章目录 视图的移动右侧小键摄像机跟随调整摄像机的窗口比例当前角度变成拍摄视角视图&#xff08;正视图&#xff0c;顶视图&#xff0c;侧视图&#xff09;物体的对焦物体的移动&#xff0c;旋转&#xff0c;放大与缩小加选框选全选添加物体物体删除 视图的移动 shift 鼠标…

JavaScript之观察者模式

本文作者为 360 奇舞团前端开发工程师 概述 在日常开发中&#xff0c;开发人员经常使用设计模式来解决软件设计中的问题。其中&#xff0c;观察者模式是一种常用的模式&#xff0c;它可以帮助开发人员更好地处理对象之间的通信。在 JavaScript 中&#xff0c;观察者模式的应用非…

关于第一届全球电子纸创新应用金奖征集评选及报名指南

重要通知 &#xff5c;关于第一届全球电子纸创新应用金奖征集评选及报名指南https://mp.weixin.qq.com/s/RWsZtmJ20-NZXMG0k0rwPA?wxwork_useridEPIA 从2004年&#xff0c;Sony推出全球首款电纸书阅读器至今20载&#xff0c;这期间&#xff0c;到底诞生了多少种创新产品&#…

国外访问学者面签需要注意什么?

国外访问学者面签是前往国外进行学术研究或合作的关键一步&#xff0c;因此需要谨慎准备。以下是知识人网小编整理的一些需要注意的重要事项&#xff0c;以确保面签顺利进行&#xff1a; 1.签证申请材料准备&#xff1a;首先&#xff0c;要仔细阅读所申请国家的签证要求&#x…

【Git】02-Git常见应用

文章目录 1. 删除不需要分支2. 修改最新Commit的Message3. 修改之前Commit的Message4. 连续多个Commit整理为一个5. 不连续的Commit整理为一个6. 比较暂存区和HEAD中文件差异7. 比较工作区和暂存区中文件差异8. 将暂存区恢复为HEAD相同9. 工作区文件恢复和暂存区相同10. 取消暂…

git提示:remote origin already exists

目录 问题场景 问题原因 问题解决 问题场景 在GitLab中新建仓库后&#xff0c;然后将本地项目提交提示&#xff1a;remote origin already exists. 问题原因 error: remote origin already exists. 错误&#xff1a;远程源点已存在&#xff08;翻译&#xff09; 出现该错误的…

华为云云耀云服务器L实例评测|基于L实例安装Prometheus+Grafana插件实现数据可视化监控

文章目录 一、云耀云服务器介绍二、安装Prometheus创建prometheus.service配置文件启动prometheus服务查看prometheus服务进程三、安装node_exporter下载node_exporter组件包创建node_exporter.service配置文件启动node_exproter服务配置prometheus.yml文件访问Prometheus四、安…

蓝桥杯每日一题2023.9.16

蓝桥杯2022年第十三届省赛真题-X进制减法 - C语言网 (dotcpp.com) 题目描述 进制规定了数字在数位上逢几进一。 X 进制是一种很神奇的进制&#xff0c;因为其每一数位的进制并不固定&#xff01;例如说某种 X 进制数&#xff0c;最低数位为二进制&#xff0c;第二数位为十进…

AR技术软件开发网站PbootCMS模板源码 支持手机端

AR技术软件开发网站PbootCMS模板&#xff08;带手机端&#xff09;- 优化SEO效果 模板简介&#xff1a; 这是基于PbootCMS内核开发的模板&#xff0c;专为软件开发和智能科技类企业设计。该模板具有简洁简单的页面设计&#xff0c;易于管理&#xff0c;并附带测试数据。 模板…

一款固定资产设备管理系统、对常用资产设备进行信息化管理

一、开源项目简介 EAM固定资产设备管理系统&#xff0c;满足中小企业基本需求&#xff0c;对常用资产设备进行信息化管理&#xff0c;包含自定义支持各类设备、自带导入导出、维护工作统计、采购管理、文档管理、合同管理等功能。 实现企业对资产的基本管理,包含对资产的登记、…

6.2 Sunday搜索内存特征

Sunday 算法是一种字符串搜索算法&#xff0c;由Daniel M.Sunday于1990年开发&#xff0c;该算法用于在较长的字符串中查找子字符串的位置。算法通过将要搜索的模式的字符与要搜索的字符串的字符进行比较&#xff0c;从模式的最左侧位置开始。如果发现不匹配&#xff0c;则算法…

什么是IoT数字孪生?

数字孪生是资产或系统的实时虚拟模型&#xff0c;它使用来自连接的物联网传感器的数据来创建数字表示。数字孪生允许您从任何地方实时监控设备、资产或流程。数字孪生用于多种目的&#xff0c;例如分析性能、监控问题或在实施之前运行测试。从物联网数字孪生中获得的见解使用户…

软件测试 —— 答疑篇

什么是软件测试&#xff1a; 软件测试是不是就是找 bug &#xff1f; 软件测试就是证明软件不存在错误的过程 软件测试就是为了证明程序能够正确运行 刚新买来一部手机&#xff0c;我们要干什么&#xff1f; 一场考试 , 做完一遍题目之后 , 进行一遍检查 , 就是在 "…

迅为RK3399开发板创建android工程

打开 AndroidStudio 软件&#xff0c;点击“Start a new Android Studio project”新建一个 Native C工程&#xff08;因为我们要调用本地库&#xff0c;所以要创建这个 C实例工程&#xff09;&#xff0c;点击“Next” 2.填写创建信息&#xff0c;如下图所示。最后点击“finis…

台灯应该买什么样的才能护眼?盘点好用的护眼台灯

现在我们很多家长对自己孩子的视力十分关心&#xff0c;生怕自己的孩子是近视、远视、弱视等等。对于父母而言&#xff0c;在孩子读书压力大课业重的关键时期&#xff0c;为孩子选择合适的桌椅&#xff0c;保护灯具从而保护孩子的眼睛是非常重要的事情!那么买给孩子读书做功课的…

全网最全!保姆级教程!XRD数据分析工具HighScore3.0.5+数据库2021下载、安装及使用教程...

编辑&#xff1a;研路科研人Sci “研路漫漫&#xff0c;伴你同行” 01 目录 1.目录 2.软件下载 3.介绍 3.1 概含介绍 3.2 特点介绍 4.下载、安装教程 4.1 软件安装教程 4.2 数据库导入教程 5.使用教程 5.1导入文件 5,2 寻峰 5.3 背底扣除 5.4 检索 5.5 导出报告 02 软件下载 压…

yolov5自动训练/预测-小白教程

文章目录 引言一、配置参数设置1、数据参数配置2、模型训练参数配置3、模型预测参数配置 二、一键训练/预测的sh介绍1、训练sh文件(train.sh)介绍2、预测sh文件(detect.sh)介绍 三、本文训练main代码解读1、训练main函数解读2、数据加工与参数替换 四、本文预测main代码解读1、…

MFC扩展库BCGControlBar Pro v33.6亮点 - 流程图、Ribbon Bar功能升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.6已正式发布了&#xff0c;此版本包含了对图表组件的改进、带隐藏标签的单类功能区栏…

数据结构--7.1散列表(哈希表)查找

散列表查找 我们要在a[ ] 中查找key关键字的记录&#xff1a; ——顺序表查找&#xff1a;挨个儿查找 ——有序表查找&#xff1a;二分法查找 ——散列表查找 记录的存储位置 f&#xff08;关键字&#xff09; 散列技术是在记录的存储位置和它的关键字之间建立一个确定的…