C++实现模版模式 + 创建者模式的demo

前言

        最近需要写gstreamer的项目,其中推流模块,可能设计到有可能会有很多种管道,比如相机编码到RTP,相机编码到RTSP,相机编码到UDP视频流等,如果只有这么几种就算了,以后还可能会有许多可能得扩展,所以干脆就用设计模式封装一下。

        设计思路是,先写一个管道模版,然后不同的管道都继承自这个模板,模板提供统一的接口,不同的管道底层使用不同的实现,这样就可以实现以后拓展许多种不同的管道,为了方便管理,于是在模板模式下多加了创建者模式。以下是Demo:

demo源码:

思路:Template是模板,AAA,和BBB是继承自模板的具体实现。使用创建者Creator来创建,当然啦,具体项目的设计更为精妙,因为某些原因,就先不发出来了。

#include <bits/stdc++.h>
using namespace std;enum Type {A = 0,B,C,D
};// 前置声明
class TemPlate;
class AAA;
class BBB;// 模板类TemPlate
class TemPlate {
public:TemPlate() {}virtual ~TemPlate() {}// 纯虚函数,子类必须实现virtual void init() = 0;virtual void start() = 0;
};// 类AAA的定义
class AAA : public TemPlate {
public:AAA() {}~AAA() override {}void init() override {cout << "AAA:init..." << endl;}void start() override {cout << "AAA:start..." << endl;}
};// 类BBB的定义
class BBB : public TemPlate {
public:BBB() {}~BBB() override {}void init() override {cout << "BBB:init..." << endl;}void start() override {cout << "BBB:start..." << endl;}
};// Creator类
class Creator {
public:Creator() {}~Creator() {}// 根据类型创建相应的对象TemPlate* create(Type t) {switch (t) {case A:cout << "create A: " << endl;m_template = new AAA();break;case B:cout << "create B: " << endl;m_template = new BBB;break;case C:cout << "create C: " << endl;break;case D:cout << "create D: " << endl;break;default:cout << "create A: " << endl;m_template = new AAA;break;}return m_template;}public:TemPlate* m_template;
};int main() {Creator c;TemPlate* t = c.create(A);t->init();delete t;return 0;
}

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

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

相关文章

Kafka3学习笔记

文章目录 一、Kafka概述和入门1、Kafka概述1.1 定义1.2 消息队列1.3 Kafka 基础架构 2、Kafka 快速入门2.1 安装部署2.2 集群启停脚本 3、Kafka 命令行操作3.1 Topic命令行操作3.2 生产者命令行操作3.3 消费者命令行操作 二、Kafka核心概念详解1、Kafka 生产者1.1 生产者消息发…

如何用chatgpt提升工作效率

使用ChatGPT可以提升工作效率的几种方式&#xff1a; 快速撰写文档&#xff1a;ChatGPT可以根据提供的关键信息&#xff0c;快速生成整篇文章。这样能够节省大量时间和精力。自动生成报告&#xff1a;无论是市场分析报告还是销售数据报告&#xff0c;只需提供关键数据和信息&a…

MySQL 多表查询

文章目录 多表关系一对多多对多一对一 查询合并查询&#xff08;笛卡尔积&#xff0c;会展示所有组合结果&#xff09;&#xff1a;内连接查询外连接查询自连接查询联合查询 union, union all子查询单行子查询列子查询行子查询表子查询 :::success 多表查询&#xff0c;也称为…

如何在 Python 中将语音转换为文本

一、说明 学习如何使用语音识别 Python 库执行语音识别&#xff0c;以在 Python 中将音频语音转换为文本。想要更快地编码吗&#xff1f;我们的Python 代码生成器让您只需点击几下即可创建 Python 脚本。现在就现在试试&#xff01; 二、语言AI库 2.1 相当给力的转文字库 语音…

类和对象 第三部分第二小节:空指针访问成员函数

C中空指针也可以调用成员函数的&#xff0c;但是也要注意有没有用到this指针&#xff0c;如果有用到this指针&#xff0c;需要加以保证代码的健壮性 代码案例 出现报错 报错原因&#xff1a;因为新建的指针是空&#xff0c;所以this指代的对象为空&#xff0c;因此没有成员变量…

【数据库学习】Flyway

1&#xff0c;功能 数据库版本管理&#xff1b; 实现管理并跟踪数据库变更&#xff0c;支持数据库版本自动升级。 2&#xff0c;使用 1&#xff09;java使用 添加依赖 <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</a…

Flume1.9基础学习

文章目录 一、Flume 入门概述1、概述2、Flume 基础架构2.1 Agent2.2 Source2.3 Sink2.4 Channel2.5 Event 3、Flume 安装部署3.1 安装地址3.2 安装部署 二、Flume 入门案例1、监控端口数据官方案例1.1 概述1.2 实现步骤 2、实时监控单个追加文件2.1 概述2.2 实现步骤 3、实时监…

无人机路径优化(八):五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、五种算法&#xff08;DBO、LO、SWO、COA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为的启发…

华为路由器IPv6基础配置

1. R2的两个接口均采用静态IPv6地址配置方法 2. R1的GigabitEthernet0/0/3接口采用无状态 地址配置 3. R3的GigabitEthernet0/0/3接口采用DHCPv6 的方式配置IPv6地址 R1配置 ipv6 #全局使能IPv6 interface GigabitEthernet0/0/0ipv6 enable ipv6 address auto link-local #为…

vue项目打包部署到服务器并使用cdn加速

配置 vue.config.js文件 const isProd process.env.NODE_ENV production module.exports {// 其他配置chainWebpack: config > {// 生产环境下使用CDNif (isProd) {config.plugin(html).tap(args > {args[0].cdn assetsCDNreturn args})}},// 生产环境下替换路径为c…

conda管理python安装包与虚拟环境的相关命令汇总

conda的简单介绍 Anaconda&#xff0c;是一个开源的Python发行版本&#xff0c;包含了conda、Python以及一大堆安装好的工具包及依赖项。 conda是Anaconda中的一个开源的、Python包和环境的管理工具&#xff0c;包含于Anaconda的所有版本当中。因此使用conda需要先安装Anacon…

【Druid 登陆异常】

Druid 登陆异常 问题描述&#xff1a;页面登陆将请求参数放到请求体中导致无法通过request.getParameter 方式 服务加载流程 通过 DruidStatViewServletConfiguration 中方法 statViewServletRegistrationBean 初始化StatViewServlet 通过 com.alibaba.druid.support.jakarta…

【Android】在WSA安卓子系统中进行新实验性功能试用与抓包(2311.4.5.0)

前言 在根据几篇22和23的WSA抓包文章进行尝试时遇到了问题&#xff0c;同时发现新版Wsa的一些实验性功能能优化抓包配置时的一些步骤&#xff0c;因而写下此篇以作记录。 Wsa版本&#xff1a;2311.40000.5.0 本文出现的项目&#xff1a; MagiskOnWSALocal MagiskTrustUserCer…

统计字符串中的英文字母、中文、数字、标点符号的个数的练习题

题目&#xff1a; 统计字符串中的英文字母、中文、数字、标点符号的个数的练习题 实现思路&#xff1a; 1.初始化: 定义一个HashMap&#xff08;名为map&#xff09;来存储四种字符的统计结果。这四种字符分别是&#xff1a;英文字母、中文、数字和标点符号。 2.遍历字符串: 使…

索引是越多越好吗?

索引并不是“越多越好”。虽然索引对于提高数据库查询的速度至关重要&#xff0c;但过多的索引也会带来一些负面影响。理解索引的适当使用和潜在的代价是数据库设计和性能调优的关键部分。以下是索引数量的权衡&#xff1a; 索引的优势&#xff1a; 提高查询速度&#xff1a;索…

Ultraleap 3Di示例Interactable Objects组件分析

该示例代码位置如下&#xff1a; 分析如下&#xff1a; Hover Enabled&#xff1a;悬停功能&#xff0c;手放在这个模型上&#xff0c;会触发我们手放在这个模型上的悬停功能。此时当手靠近模型的时候&#xff0c;手的模型的颜色会发生改变&#xff0c;反之&#xff0c;则不会…

工具记录篇

个人喜欢&#xff0c;但是很少用到的工具&#xff0c;记录一下。20240126起草 那些找不到官网的、官网现版本不好用的 就用某度云和blue奏云盘存&#xff08;限制100M以内&#xff09;了。 部分内容是从各大网站上看到的&#xff0c;小破站、系统迷、52pj等。 本帖是方便自己使…

Java服务端使用freemarker+wkhtmltoimage生成Echart图片

目录 1.通过 freemarker 将ftl转成html 1.1 freemarker 手册: 1.2 添加freemarker maven依赖 1.3 添加 echart-test.ftl 模版文件 1.4 添加 FreemarkerTool 工具类 1.5 添加测试main方法 1.6 运行,生成echart-test-时间戳.html 文件 2. 通过wkhtmltoimage将html 转为p…

数位dp,HDU 4151 The Special Number

一、题目 1、题目描述 In this problem, we assume the positive integer with the following properties are called ‘the special number’: 1) The special number is a non-negative integer without any leading zero. 2) The numbers in every digit of the special nu…

763. 划分字母区间 - 力扣(LeetCode)

题目描述 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。…