C++设计模式6:适配器模式

        适配器模式的主要目的,是让不兼容的接口可以在一起工作,当我们自己的项目接口与一些第三方库的接口不兼容的时候,就需要用到适配器,或者我们自己重构自己的代码,显然后者的代价比较大。

        假如,我们有一种电脑,这个电脑只支持VGA接口,那么它自然而然可以和支持VGA的投影仪一起使用。 

#include<iostream>
using namespace std;
class VGA
{
public:VGA() {}~VGA() {}virtual void  play() = 0;
};
class Type5
{
public:Type5() {}~Type5() {}virtual void  play() = 0;
};
class Computer//只支持VGA接口的电脑
{
public:Computer() {}~Computer() {}void playVideo(VGA *vga){vga->play();}
};
class Video1:public VGA
{
public:Video1() {}~Video1() {}void play(){cout << "play with VGA" << endl;}
};
class Video2 :public Type5
{
public:Video2() {}~Video2() {}void play(){cout << "play with Type5" << endl;}
};
int main()
{Computer computer;computer.playVideo(new Video1());return 0;
}

        那对于支持Type5的投影仪,这台电脑,岂不是不能使用了?

        要解决这个问题,非常简单,只需要加一个转换头就可以了,这个转换头就是我们的适配器。

        

class VGAToType5Adapter:public VGA
{
public:VGAToType5Adapter(Video2* video2) :myvideo(video2){}~VGAToType5Adapter(){delete myvideo;}void play(){myvideo->play();}
private:Video2* myvideo;
};


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

相关文章

【设计模式之建造者模式——自行车加工】

背景&#xff1a; 软件开发过程中有的时候需要创建很复杂的对象&#xff0c; ⽽建造者模式的主要思想是将对象的构建过程分为多个步骤&#xff0c;并为每个步骤定义⼀个抽象的接⼝。 具体的构建过程&#xff1a;由实现了这些接⼝的具体建造者类来完成。同时有⼀个指导者类负责…

如何设置Winfrom中dataGridView中的内容换行并行高自适应

如何设置Winfrom中dataGridView行高 在 Windows Forms (WinForms) 应用程序中&#xff0c;DataGridView 控件用于显示和编辑数据的表格形式。如果你想要设置 DataGridView 控件中行的高度&#xff0c;可以通过以下几种方式来实现&#xff1a; 1. 通过属性设置行高 你可以直接…

Springboot里集成Mybatis-plus、ClickHouse

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; Springboot里集成Mybati…

pytorch深度学习基础 8 (使用PyTorch的内置功能和默认参数来构建和训练一个简单的线性模型)

co 上面几节都是自定义了很多东西&#xff0c;比如模型的权重&#xff0c;偏置的大小&#xff0c;学习率&#xff0c;损失函数等等&#xff0c;但是实际上pytorch有很多内置的函数以及默认的参数可以对我们的模型部分进行替换&#xff0c;效果也是非常好的&#xff0c;今天我们…

【C#】【EXCEL】Bumblebee/Components/Analysis/GH_Ex_Ana_CondBar.cs

这段代码定义了一个名为 GH_Ex_Ana_CondBar 的 Grasshopper 组件&#xff0c;其主要功能是为 Excel 工作表中的特定范围添加条件格式条形。以下是该组件的主要功能和特点&#xff1a; 功能概述&#xff1a; 为 Excel 中的数据范围添加基于相对值的条件格式条形允许用户自定义条…

OZON免费选品工具大揭秘

OZON免费选品工具大揭秘&#xff0c;OZON新手下店后如何轻松选品 对于刚入驻OZON平台的新手卖家来说&#xff0c;如何选择热销商品是他们面临的一大难题。今天&#xff0c;我们将为你揭秘OZON免费选品工具-快蜗牛选品&#xff0c;帮助大家解决OZON新手下店后如何轻松选品的问题…

摄影曝光:曝光模式认知

写在前面 学习整理《摄影曝光&#xff1a;拍出好照片的49个关键技法》读书笔记博文内容涉及曝光模式简单认知适合小白认知理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于虚度时间和没有好好做事&#xff0c;所以唯一的解决办法就是行动起来&#xff0c;认真…

如何使用mcu 内置 flash 实现fatfs

一、环境与目的 AT32F403AVGT7&#xff0c;FLASH从0x80e0000到最后&#xff0c;共128K。扇区大小为512。 注意&#xff1a;Flash 的扇区大小为2KB。 fatfs 80286 /* Revision ID */ 目标在于利用单片机1MBflash后面的一小部分&#xff0c;以方便应用程序存储系统参数。 …

四,接口类型和网络协议

四&#xff0c;接口类型和网络协议 在前后端开发中&#xff0c;常用的接口类型/协议主要涉及网络协议和应用程序接口&#xff08;API&#xff09;两个方面。以下是对这些常用接口类型/协议的详细归纳&#xff1a; 一、网络协议 网络协议是前后端通信的基础&#xff0c;它们定…

Qt 中 QDir 常用函数详解

在 Qt 框架中&#xff0c;QDir 类提供了强大的功能来处理目录和文件路径。无论是导航文件系统、过滤文件&#xff0c;还是获取路径的详细信息&#xff0c;QDir 都为开发者提供了一系列便捷的函数。我们详细探讨一些常用的 QDir 函数&#xff0c;包括 absoluteFilePath、absolut…

为什么要用系统变量

为什么要用系统变量 OS根据系统变量的path设置的路径查找exe文件&#xff0c;因此可以方便地通过windows r查找或cmd命令行处直接输入exe的文件名&#xff08;不用后缀exe&#xff09;打开该软件&#xff0c;免去了鼠标双击图标的过程。 另外系统变量通过电脑设置处&#xff…

MAC打开IDA Pro意外退出

报意外退出 解决步骤如下 将解压后的整个目录都移动到应用程序 而后执行命令 Desktop % sudo xattr -rd com.apple.quarantine /Applications/IDA\ Pro\ 7.7/ida64.app xattr: 一个用于操作文件和目录扩展属性的命令。 -r: 递归地处理子目录和文件。 -d: 删除指定的扩展属性…

Adobe Illustrator学习宝典(自用)

&#xff08;1&#xff09;Adobe Illustrator中如何避免选中非目标图层。 如果你要选择除去那个不要的 或者 N个不要的 &#xff08;不想选的&#xff09; 你就要锁定它。 快捷键Ctrl2 &#xff08;对象-锁定&#xff09;。 要一次性解锁所有图层&#xff0c;你可以使用快捷键…

Facebook的AI助手:如何提升用户社交体验的智能化

在现代社交媒体平台中&#xff0c;人工智能&#xff08;AI&#xff09;的应用正逐渐改变人们的社交体验。Facebook作为全球最大的社交媒体平台之一&#xff0c;已在AI技术的开发与应用上投入了大量资源&#xff0c;并通过其AI助手为用户提供了更加个性化、智能化的互动体验。这…

YOLO-World: Real-Time Open-Vocabulary Object Detection:实时开放词汇对象检测

YOLO系列探测器已成为高效实用的工具。然而&#xff0c;它们对预定义和训练的对象类别的依赖限制了它们在开放场景中的适用性。针对这一限制&#xff0c;我们引入了YOLO-World&#xff0c;这是一种创新方法&#xff0c;通过视觉语言建模和大规模数据集的预训练&#xff0c;增强…

Redis的config命令详解

Redis 的 CONFIG 命令用于动态地查看和更改 Redis 服务器的配置参数。它允许你在不需要重启 Redis 服务器的情况下调整某些运行时设置。CONFIG 命令有几个子命令&#xff0c;最常用的包括 GET、SET、RESETSTAT 和 REWRITE。以下是这些子命令的详细解释&#xff1a; 1. CONFIG …

Java 5.3 - MyBatis

#{} 和 ${} 的区别是什么&#xff1f; ${} 是 Properties 文件中的变量占位符&#xff0c;它可以用于标签属性值和 sql 内部&#xff0c;属于静态文本替换&#xff0c;比如 ${driver} 被静态替换为 com.mysql.jdbc.Driver #{} 是 sql 的参数占位符 xml 映射文件中&#xff0c…

NoSql数据库 Redis集群详解

目录 一、NoSql数据库简介 1.1 数据库主要分为两大类&#xff1a;关系型数据库与 NoSQL 数据库 1.2 为什么还要用 NoSQL 数据库呢&#xff1f; 1.3 RDBMS和NOSQL的特点及优缺点&#xff1a; 二 Remote Dictionary Server 简介&#xff08;redis&#xff09; 2.1 什么是redis …

海外媒体软文宣发:智利媒体【埃尔迪纳摩eldinamo】新闻媒体发布通稿

海外媒体软文宣发&#xff1a;智利媒体【埃尔迪纳摩eldinamo】新闻媒体发布通稿 【埃尔迪纳摩eldinamo】 作为智利的重要新闻媒体&#xff0c;【埃尔迪纳摩eldinamo】致力于为读者提供全面、准确、及时的新闻报道。我们关注时事、政治、经济、体育等各个领域&#xff0c;为读…

【python】PyQt5中富文本框QTextEdit的详细教程与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…