当前位置: 首页 > news >正文

《设计模式》适配器模式

《设计模式》适配器模式

适配器(Adapter)是一种结构型设计模式,它允许我们将一个类的接口转换成另一个类的接口,从而使得原本由于接口不兼容而无法合作的类能够一起工作。适配器模式通常用于以下情况:

  1. 在已有的类中添加一些新的行为或者功能,但是又不能改变其原有的接口。在这种情况下,我们可以创建一个适配器,将新的功能转换成已有类所能接受的接口。
  2. 当需要将一个现有的类集成到另一个类库中时,由于接口不同,无法直接集成。这时候可以创建一个适配器类,将现有类的接口转换成另一个类库的接口。

适配器模式的优点包括:

  1. 提高代码的复用性:适配器模式可以让不兼容的类一起工作,从而提高代码的复用性。
  2. 提高代码的灵活性:适配器模式可以让我们很容易地扩展现有的代码,添加新的功能。
  3. 降低代码的依赖性:适配器模式可以让我们减少对现有代码的依赖,从而提高代码的可维护性。

在本例中,我们将实现一个适配器,将一个现有的类的接口转换成目标类的接口。

假设我们有一个名为 Adaptee 的类,它有一个名为 SpecificRequest() 的方法:

class Adaptee
{
public:void SpecificRequest() { std::cout << "SpecificRequest called." << std::endl; }
};

现在,我们需要将 Adaptee 类的接口转换成目标类的接口,该目标类需要具有一个名为 Request() 的方法。我们可以使用适配器模式来实现这一点。首先,我们定义一个目标类:

class Target
{
public:virtual void Request() = 0;
};

然后,我们定义一个适配器类,该类继承自目标类并包含一个指向 Adaptee 对象的指针:

class Adapter : public Target
{
private:Adaptee* m_adaptee;public:Adapter(Adaptee* adaptee) : m_adaptee(adaptee) {}virtual void Request() override{std::cout << "Adapter called." << std::endl;m_adaptee->SpecificRequest();}
};

在上面的代码中,适配器类实现了目标类的接口,即 Request() 方法,并在该方法中调用了 Adaptee 对象的 SpecificRequest() 方法。

最后,我们可以使用以下代码测试适配器模式:

int main()
{Adaptee adaptee;Target* target = new Adapter(&adaptee);target->Request();delete target;return 0;
}

在上面的代码中,我们首先创建了一个 Adaptee 对象,并使用该对象创建了一个适配器对象。然后,我们使用适配器对象调用 Request() 方法,该方法实际上会调用 Adaptee 对象的 SpecificRequest() 方法。

C++ STL stack queue

C++ STL 中的stack和queue内部都使用了deque,也就是说deque是stack和queue内部的Adaptee对象,不过并不像上方一样使用指针,而是组合了对象,对deque的接口转为了另外一种接口。

相关文章:

《设计模式》适配器模式

《设计模式》适配器模式 适配器&#xff08;Adapter&#xff09;是一种结构型设计模式&#xff0c;它允许我们将一个类的接口转换成另一个类的接口&#xff0c;从而使得原本由于接口不兼容而无法合作的类能够一起工作。适配器模式通常用于以下情况&#xff1a; 在已有的类中添…...

linux 随笔 5-服务管理

0. 装到虚拟机与物理机&#xff0c;感觉各有各的不方便 Linux下systemctl命令和service、chkconfig命令的区别 1. service 根据/etc/init.d目录下的配置&#xff0c;做服务相关的&#xff1a; 启动停止重新启动关闭系统服务 2. chkconfig 用于维护 /etc/rc[0-6].d 的命令…...

【java基础】枚举类(enum)

文章目录基本介绍快速使用字段、方法、构造器枚举类方法toString方法valueOf方法values方法ordinal方法基本介绍 在java中有一种特殊的类型就是枚举类&#xff0c;对于一个有限的有固定值的集合&#xff0c;我们就可以考虑使用枚举类来进行表示&#xff0c;例如服装的大小为 小…...

Linux2

&#xff08;1&#xff09;root用户的主目录&#xff1a; &#xff08;3&#xff09;查看 &#xff08;4&#xff09;远程登陆系统&#xff1a;CentOS7上使用ifconfig查看IP&#xff0c;使用putty远程登陆 &#xff08;5&#xff09;查询目前用户登录情况&#xff1a;who命令…...

C语言基础应用(二)数据的转换与输入输出

学习了C语言的基本数据类型后&#xff0c;我们可能会想这些数据如何进行运算&#xff0c;是否可以让不同类型的数据直接进行运算呢&#xff1f; 一、数据类型转换 1.1 int类型与float类型之间的转换 int i 5; // j值为2.000000 因为左右操作数均为整型float j i/2; // …...

C# 用NPOI读取EXCEL

1. 复制DLL文件 ICSharpCode.SharpZipLib.dll NPOI.dll NPOI.OOXML.dll NPOI.OpenXml4Net.dll NPOI.OpenXmlFormats.dll 2. 在工程中添加引用 3. using System.IO; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; using NPOI.SS.UserModel; using NPOI.OpenXml4Ne…...

《高性能MySQL》——MySQL基准测试(笔记)

文章目录二、MySQL基准测试2.1 为什么需要基准测试2.2 基准测试的策略2.2.1 测试何种指标2.3 基准测试方法2.3.1设计和规划基准测试2.3.2 基准测试应该运行多长时间2.3.3 获取系统性能和状态2.3.4 获得准确的测试结果2.3.5 运行基准测试并分析结果2.3.6 绘图的重要性2.4 基准测…...

微服务注册到Nacos后如何读取外网IP

背景 微服务部署后&#xff0c;各服务是需要相互间调用的&#xff0c;其中服务A在去调用服务B的时候发现无法调用成功。其中服务注册和发现中心以及配置中心使用的是Nacos。Nacos客户端在注册服务时会从机器网卡中选择其中一个IP来注册&#xff0c;当我们要部署的机器存在多个…...

【华为OD机试模拟题】用 C++ 实现 - 匿名信(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 货币单位换算(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 停车场最大距离(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 重组字符串(2023.Q1) 【华为OD机试模…...

nginx配置https域名

如果已安装nginx若没有配置ssl模块需要添加ssl模块。注意&#xff1a;默认是不会安装ssl模块的查看nginx是否有安装ssl模块./nginx -V若执行结果显示下图中的-with-http_ssl_module则说明nginx已经安装了ssl模块若没有安装则重新打包编译./configure --with-http_ssl_module编译…...

c语言tips-大端小端存储介绍和使用union判断大小端

1. 大小端介绍 大端&#xff08;Big Endian&#xff09;和小端&#xff08;Little Endian&#xff09;是两种CPU或者计算机系统存储数据的方式。 在大端系统中&#xff0c;数据的高位字节&#xff08;MSB&#xff09;存储在内存地址的低位&#xff0c;低位字节&#xff08;LSB…...

DevOps落地与转型:提升研发效能的方法与实践

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作者&#x1f3c6;&#xff0c;阿里云专家博主&#x1f3…...

【测试】loadrunner安装

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录备注一、下载安装包二、安装loadrunner三、修改浏览器配置今天搬砖不努力&#xff0c;明天地位不稳定&#xff01; 备注 电脑最好有IE浏览器&#xff0c;但是没有也没事儿。&#xff08;注意&#xff1a;IE浏览器不…...

物联网的新应用--触摸物联网

摘要&#xff1a;本文介绍一下触摸物联网的新进展--电子皮肤的物联网应用。还以为物联网的作用领域单单是从现场采集数据或者传输命令到执行设备吗&#xff1f;不&#xff0c;物联网的应用范围远比控制一盏灯大的多。据网上报道&#xff0c;香港城市大学&#xff08;城大&#…...

用 Python 画如此漂亮的插图 ,So easy

人生苦短&#xff0c;快学Python&#xff01; 今天我们进行一次实战案例分享&#xff0c;以全球预期寿命与人均 GPD数据为例&#xff0c;写一篇 Python 中漂亮散点图的快速指南。除了正常的数据清洗/处理、还会进行简单的统计分析&#xff0c;实现数据处理-统计分析-可视化一条…...

vue-知识点总结

历史 2015年 10月27 1.0.0 Evangelion 新福音战士2016年 10月1日 2.0.0 Ghost in the Shell 攻壳机动队2019年 2月 2.62020年 9月18日 3.0.0 One Piece(海贼王)2021年 8月10日 3.2.0 .sync where 父向子传递props, 需要双向绑定的时候(子组件想更新这个值) how <one-comp…...

Dubbo源码解析-——SPI机制

文章目录一、什么是SPI机制二、Java原生的SPI机制2.1、javaSPI示例2.1.1、编写接口和实现类2.1.2、编写配置文件2.1.3、通过SPI机制加载实现类2.1.4、JAVA SPI 源码解析2.1.4.1、ServiceLoader#load2.1.4.2、ServiceLoader构造方法2.1.4.3、ServiceLoader#reload2.1.4.4、LazyI…...

赛后补题:CF1789C Serval and Toxel‘s Arrays

传送门:CF 题目描述: 题目较长,此处省略 输入: 3 3 2 1 2 3 1 4 2 5 1 1 1 1 1 10 10 4 6 9 12 16 20 2 10 19 7 1 3 5 4 2 17 2 18 6 11 7 1 8 17 5 5 5 5 2 2 输出: 13 1 705比赛的时候感觉已经想到了正解,但是没有想的很清楚,所以赛时没有打出来. 我认为这道题的突破口其…...

Linux学习(8.7)命令与文件的搜寻

目录 命令与文件的搜寻 which 文件档名的搜寻&#xff1a; whereis (寻找特定文件) locate find 以下内容转载自鸟哥的Linux私房菜 命令与文件的搜寻 which 这个命令是根据『PATH』这个环境变量所规范的路径&#xff0c;去搜寻『运行档』的档名&#xff5e; 所以&am…...

Linux下 Makefile文件基本语法二

本文继续上一篇关于 Makefile 文件内容的介绍。上一篇文章如下&#xff1a; Linux下 Makefile 基本语法_凌雪舞的博客-CSDN博客 一. Makefile 上一篇文章介绍了 Makefile基本语法中的变量&#xff0c;模式规则&#xff0c;自动化变量。这里继续介绍 Makefile 的另外一些语…...

ElasticSearch集群搭建步骤

文章目录一、前言二、使用 RPM 安装 Elasticsearch导入 Elasticsearch GPG 密钥从 RPM 存储库安装三、设置基本安全性生成证书使用TLS加密节点间通信四、为 Elasticsearch 加密 HTTP 客户端通信五、配置集群编辑 elasticsearch.yml&#xff08;通用配置&#xff09;关键性能参数…...

Local AI MusicGen教育应用:帮助学生理解音乐情绪表达方式

Local AI MusicGen教育应用&#xff1a;帮助学生理解音乐情绪表达方式 1. 引言&#xff1a;当AI成为音乐老师 想象一下&#xff0c;你是一位音乐老师&#xff0c;正在给学生讲解“悲伤”这种情绪在音乐中是如何表达的。传统的教学方式可能是播放一段肖邦的夜曲&#xff0c;或…...

ms-swift微调框架入门:快速掌握LoRA微调与模型合并技巧

ms-swift微调框架入门&#xff1a;快速掌握LoRA微调与模型合并技巧 1. 引言 在当今大模型技术快速发展的背景下&#xff0c;如何高效地对大型语言模型进行微调成为了许多开发者和研究者的关注焦点。ms-swift作为一款强大的微调框架&#xff0c;提供了丰富的功能和技术支持&am…...

OpenClaw自动化测试框架:百川2-13B驱动的CI/CD辅助方案

OpenClaw自动化测试框架&#xff1a;百川2-13B驱动的CI/CD辅助方案 1. 为什么选择OpenClaw做测试自动化 去年我在重构一个中型前端项目时&#xff0c;遇到了测试覆盖率不足的老问题。手动补测试用例不仅耗时&#xff0c;还经常遗漏边界条件。当我尝试用传统测试生成工具时&am…...

Kettle错误处理实战:如何用表输出步骤捕获并存储ETL过程中的异常数据

Kettle错误处理实战&#xff1a;如何用表输出步骤捕获并存储ETL过程中的异常数据 在数据仓库和ETL&#xff08;Extract, Transform, Load&#xff09;流程中&#xff0c;错误处理是确保数据质量的关键环节。Kettle&#xff08;现称Pentaho Data Integration&#xff09;作为一款…...

告别手动操作!用Word宏/VBA实现doc批量转docx的隐藏技巧

职场效率革命&#xff1a;Word宏/VBA零代码实现文档格式批量升级 每天面对堆积如山的.doc文件&#xff0c;行政文员小张总要手动打开每个文件另存为.docx格式——这个机械操作不仅耗时费力&#xff0c;还容易遗漏文件。其实微软Office内置的自动化工具能完美解决这个问题&#…...

UReport2实战:如何优雅地导出多Sheet页报表(动态/静态分页全解析)

UReport2实战&#xff1a;如何优雅地导出多Sheet页报表&#xff08;动态/静态分页全解析&#xff09; 在数据驱动的商业环境中&#xff0c;报表导出功能已成为企业级应用的标配需求。当面对海量数据时&#xff0c;传统的单Sheet页Excel导出方案往往导致文件臃肿、查阅困难。URe…...

【悬疑言情小说推荐】《血语玫瑰》

​​​​​​《血语玫瑰》国际标准书号&#xff1a;ISBN&#xff1a;978-986-6364-30-3 作者:追月逐花 本书地址&#xff1a;http://e.dangdang.com/products/1901197341.html 每个女孩都期待男友年轻英俊、家境优渥、学识出众&#xff0c;而 “魔鬼” 恰好符合所有条件&…...

STM32博物馆环境监控系统设计与实现

基于STM32的博物馆展柜环境监控系统设计1. 项目概述1.1 系统背景文物保护工作中&#xff0c;展柜微环境稳定性直接影响文物保存状态。传统人工巡检方式存在响应滞后、数据不连续等问题。本项目设计了一套基于STM32的智能化环境监控系统&#xff0c;可实时监测温湿度、光照、烟雾…...

PyCharm项目环境混乱?试试用Mamba+environment.yml打造可复现的纯净工作流

PyCharm项目环境混乱&#xff1f;试试用Mambaenvironment.yml打造可复现的纯净工作流 当团队协作开发Python项目时&#xff0c;最令人头疼的问题莫过于"在我机器上能跑"的经典困境。不同成员使用不同版本的依赖包&#xff0c;或者本地环境被多个项目污染&#xff0c;…...