[C/C++] -- 适配器模式

适配器模式是一种结构型设计模式,它允许接口不兼容的类能够相互合作。这种模式允许将一个类的接口转换成另一个类的接口,从而使得原本由于接口不匹配而无法在一起工作的类能够协同工作。

适配器模式通常用于以下情况:

  1. 系统需要使用现有的类,但是其接口与系统要求不一致:当你需要使用一个已存在的类,但是它的接口与你期望的接口不匹配时,可以使用适配器模式。
  2. 与第三方库集成:当你需要将自己的类与某个第三方库或组件集成时,可以使用适配器模式来使它们能够协同工作。
  3. 重用既有的类:当你有一些现有的类,但是它们的接口与你的新代码不兼容时,可以使用适配器模式来重用这些类,而无需修改它们的代码。
#include <iostream>
#include <memory>
using namespace std;/*
适配器模式:让不兼容的接口可以在一起工作
电脑 -》 投影到 -》投影仪上     VGA HDMI TypeCVGA接口的电脑, (TV)投影仪也是VGA接口
*/class VGA   //VGA接口类
{
public:virtual void play() = 0;string getType()const {return "VGA";}
};//TV01表示支持VGA接口的投影仪
class TV01 : public VGA
{
public:void play(){cout << "VGA接口连接投影仪,进行视频播放" << endl;}
};//实现一个平板电脑类(只支持VGA接口)
class MatePad
{
public://由于电脑只支持VGA接口,所以该方法参数只支持VGA接口的指针/引用void playVideo(VGA *pVGA){pVGA->play();}
};// 进了一批新的投影仪,但是新的投影仪支持HDMI接口,但是电脑只支持VGA接口
class HDMI
{
public:void play(){cout << "HDMI接口连接投影仪,进行视频播放" << endl;}
};//TV02表示支持HDMI接口的投影仪
class TV02 : public HDMI
{
public:void play(){cout << "HDMI接口连接投影仪,进行视频播放" << endl;}
};//由于电脑(VGA接口)和投影仪(HDMI接口)无法直接相连,所以需要添加适配器类
class VGATOHDMIAdapter:public VGA
{
public:VGATOHDMIAdapter(HDMI *pHDMI):m_pHDMI(pHDMI){}void play()//该方法相当于转换头{m_pHDMI->play();}
private:HDMI *m_pHDMI;
};int main()
{MatePad mp;//mp.playVideo(new TV01());mp.playVideo(new VGATOHDMIAdapter(new TV02()));return 0;
}

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

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

相关文章

留学资讯 | 曼大突然官宣接受雅思单科重考!单科重考体验大揭秘!

雅思单科重考于昨日&#xff08;5月6日&#xff09;进行了大陆地区的首场考试&#xff0c;不少烤鸭都在观望状态&#xff0c;表示&#xff1a;虽然我很心动&#xff0c;但是学校们可不心动&#xff01;&#xff01; 别急&#xff01;好消息这不就来了&#xff01;曼大官网明确表…

PaddleOCR使用

最近在项目过程中需要用到文字识别的能力&#xff0c;之前没有接触过。需要对现有的开源能力进行调研和学习。 1. 基本概念 1.1 PaddlePaddle PaddlePaddle 是一个由百度开源&#xff0c;基于 Python 的深度学习框架。PaddlePaddle 针对不同的硬件环境提供了不同的安装包或安…

vue导出大量数据的表格方法

我目前的项目导出4万7数据没问题 先安装 npm install -S file-saver npm install xlsx0.16.0 -S npm install -D script-loader 我使用的版本是"file-saver": “^2.0.5”, “xlsx”: “^0.16.0” 新建Export2Excel.js //Export2Excel.js /* eslint-disable */ requ…

【docker问题记录】虚拟机ubuntu22.04使用docker-compose出现容器不能ping通宿主机所在局域网的情况

直接说结论 原因可能是因为这个版本的ubuntu启动后有时会丢失网络图标此时宿主机相当于没有联网&#xff0c;但是docker相关进程已经启动&#xff0c;使用的是无效的网络配置&#xff0c;哪怕此时再用sudo nmcli networking on启动了网络依然docker-compose容器依然无法联网&a…

stylus详解与引入

Stylus 是一个基于 Node.js 的 CSS 预处理器&#xff0c;它允许开发者以一种类似于脚本的方式编写 CSS 代码&#xff0c;从而创建出更加健壮、动态和富有表现力的样式表。Stylus 的特点包括&#xff1a; 1. 基于 JavaScript&#xff1a;由于 Node.js 是一个 JavaScript 运行环…

使用moveit控制机械臂

在这篇博客中&#xff0c;我们将详细探讨如何利用Python和Robot Operating System&#xff08;ROS&#xff09;配合MoveIt! 控制机械臂执行精确的抓取任务。机械臂技术在工业自动化、医疗服务以及研究领域扮演着越来越关键的角色。本文将通过介绍安装必要的软件、编写控制脚本以…

MP4视频转MOV电影视频格式的方法?汇帮视频格式转换器帮你实现一键转MOV

有关MOV视频格式的介绍&#xff1a; MOV视频是一种多媒体文件格式&#xff0c;它被广泛用于存储和播放音频和视频内容。这种文件格式由苹果公司开发&#xff0c;作为QuickTime播放器的一部分&#xff0c;用于在Mac OS操作系统上播放多媒体内容。MOV格式的文件通常包含视频、音…

2024年数维杯数学建模A题思路

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

vscode与git下载安装

粉丝不过W git下载地址: https://git-scm.com/downloads, 安装git时, 记住你安装Git的路径 vscode下载地址: https://code.visualstudio.com/ 下载完后, 并默认安装好, 你就可以进入配置git的环境变量了, 点击win, 点击设置 在搜索框里搜索, 高级系统设置 点到 高级 , 然后点击…

一文详解Spring与JDK注入

目录 一、Spring框架 二、JDK 三、什么是Spring的注入 四、如何实现Spring与JDK注入 一、Spring框架 Spring框架是一个开源的Java EE应用程序框架&#xff0c;它为企业级Java应用程序提供了全面的基础设施支持。Spring框架的核心特点包括依赖注入&#xff08;Dependency I…

注意力评分转化为概率分布

在注意力模型中&#xff0c;注意力评分通常表示了模型在处理信息时对不同部分的关注度。将这些评分转换为概率分布&#xff0c;可以帮助模型集中“注意力”在最相关的信息上&#xff0c;同时保留对其他信息的一定程度的敏感性。 在注意力模型中&#xff0c;注意力评分转换为概率…

TikTok营销策略解析:7大关键要素打造品牌影响力

TikTok作为近年来迅速崛起的短视频社交平台&#xff0c;已经成为全球范围内品牌营销的重要阵地。对于品牌而言&#xff0c;如何在TikTok上有效地开展营销活动&#xff0c;吸引目标受众的注意力&#xff0c;提升品牌知名度和影响力&#xff0c;是摆在他们面前的重要课题。本文No…

LINUX 入门 8

LINUX 入门 8 day10 20240507 耗时&#xff1a;90min 有点到倦怠期了 课程链接地址 第8章 TCP服务器 1 TCP服务器的介绍 开始讲服务器端&#xff0c;之前是客户端DNShttps请求 基础&#xff1a;网络编程并发服务器&#xff1a;多客户端 一请求&#xff0c;一线程 veryold…

[图解]DDD架构好简单我学会了-学会也没啥用

1 00:00:03,720 --> 00:00:05,920 内部共有&#xff0c;首先是内部的 2 00:00:08,150 --> 00:00:09,220 所以不能说什么 3 00:00:09,630 --> 00:00:10,730 不能跟外部连在一起 4 00:00:10,740 --> 00:00:15,280 比如说&#xff0c;功能架构&#xff0c;可以吗 …

Linux系统服务器时间错误

Linux系统服务器时间错误 查看系统和硬件时间命令&#xff1a; 查看系统时间&#xff1a; date查看硬件时间&#xff1a; hwclock --show解决方法&#xff1a; 1.如果系统时间不对&#xff0c;可以使用下面命令将硬件时间同步给系统时间&#xff1a; hwclock --hctosys2.如…

Linux中gitlab-runner部署使用备忘

环境&#xff1a; 操作系统:&#xff1a;CentOS8 gitlab版本&#xff1a;13.11.4 查看gitlab-runner版本 可以从https://packages.gitlab.com/app/runner/gitlab-runner/search找到与安装的gitlab版本相近的gitlab-runner版本以及安装命令等信息&#xff0c;我找到与13.11.4相…

便签怎么设置不同的标签 便签创建不同分组标签的方法

在日常工作和生活中&#xff0c;便签已成为我随身携带的小助手。每当灵感闪现&#xff0c;或是需要临时记录一些重要事项&#xff0c;我都会随手打开便签&#xff0c;快速记录下来。然而&#xff0c;随着记录的内容越来越多&#xff0c;如何高效地管理和查找这些信息成为了一个…

Swift 基本运算符

基本运算符 一、术语二、赋值运算符三、算术运算符1、求余运算符2、一元负号运算符3、一元正号运算符 四、组合赋值运算符五、比较运算符&#xff08;Comparison Operators六、三元运算符&#xff08;Ternary Conditional Operator&#xff09;七、空合运算符&#xff08;Nil C…

分布式关系型数据库管理系统 OceanBase 安装和配置教程

&#x1f30a; 分布式关系型数据库管理系统 OceanBase 安装和配置教程 &#x1f680; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝…

js自定义实现类似锚点(内容部分滚动)

场景&#xff1a; 效果图如上&#xff0c;类似锚点&#xff0c;但是屏幕不滚动。高度计算我不是很熟练。for循环写的比较麻烦。element plus 和Ant Design有类似组件效果。 html&#xff1a; <template><div><div style"height: 400px;" class&q…