适配器模式C++详解

C++11 adapter介绍 C++11 adapter介绍前言粗浅的理解容器适配器迭代器适配器1.插入迭代器适配器2.反向迭代器适配器3.IO迭代器适配器仿函数适配器仿函数STL的仿函数仿函数适配器为啥count_if只接受一元函数参数 前言 适配器这个概念我其实直到现在都还没有理解,不过我在刷面经的时候偶尔能看到这个面试点,所以咱们就一起来看看。(C++就是这样啊,真的会问的非常深入的) 粗浅的理解容器适配器 这还是在看完了ccyanxyz的文章后才豁然开朗。首先呢,adapter不仅仅只有容器适配器,它有约三个大的方面,分别是容器 阅读详情

适配器模式


适配器模式( Adapter),将一个类的接口转换成客户希望的另外接口。(比如变压器et) Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。

  • 主要解决的原本的类已经有了,但却不能直接使用,而且短时间内无法改造它,或者压根就无法改造的时候就需要适配它。

也就是说,当系统数据和行为都是正确的时候,但是接口不符合,这时候就使用Adapter

适配器模式C++实现

假设,现在有现有的各种动物,都是现成的,有猫、狗。他们都有各自的方法比如说,卧倒,打滚等,但是呢,他们的接口又不一样。为了使主人去让猫、狗做动作的接口一致,就需要适配器。因为语言不通,一个喵喵喵,一个汪汪汪。

adpter.h

#include <iostream>

class DOG {
 public:
  void Dog_Bedding() { std::cout << "小狗子,请卧倒" << std::endl; }

  void Dog_Roll() { std::cout << "小狗子,请打滚" << std::endl; }
};

class CAT {
 public:
  void Cat_Bedding() { std::cout << "小猫咪,请卧倒" << std::endl; }

  void Cat_Roll() { std::cout << "小猫咪,请打滚" << std::endl; }
};

class Target {
 public:
  virtual void Bedding()=0;  // 外部符号
  virtual void Roll()=0;
};

class adpter_cat : public Target {
 public:
  adpter_cat(CAT* c) : cat_(c) {}
  void Bedding() { cat_->Cat_Bedding(); }
  void Roll() { cat_->Cat_Roll(); }

 private:
  CAT* cat_;
};

class adpter_dog : public Target {
 public:
  adpter_dog(DOG* d) : dog_(d) {}
  void Bedding() { dog_->Dog_Bedding(); }
  void Roll() { dog_->Dog_Roll(); }

 private:
  DOG* dog_;
};

main.cc

// #include "Adpter_cat.h"
// #include "Adpter_dog.h"
// #include "cat.h"
// #include "dog.h"

#include "adpter.h"

int main() {
  CAT* cat = new CAT();
  DOG* dog = new DOG();
  adpter_cat ac(cat);
  adpter_dog ad(dog);

  ac.Bedding();
  ac.Roll();
  ad.Bedding();
  ad.Roll();
}

运行结果

小猫咪,请卧倒
小猫咪,请打滚
小狗子,请卧倒
小狗子,请打滚
C++适配器模式详解:原理、实现与应用场景 适配器模式作为 C++ 中重要的结构型设计模式,核心价值在于通过封装转换层解决接口不兼容问题,无论是类适配器的继承实现还是对象适配器的组合方式,都为系统集成提供了灵活方案。对于开发者而言,掌握它不仅是理解“接口适配”这一设计思想,更是培养代码抽象能力的过程。学习建议:设计模式的掌握始于理解而非背诵,建议结合实际项目场景(如第三方库集成、legacy 系统重构)动手实践,关注模式背后的设计原则(如开闭原则、单一职责),让设计模式真正成为解决复杂问题的利器。 阅读详情

相关推荐

【C++设计模式】Adapter 适配器模式详解

适配器模式概述 、适配器模式结构与实现 、适配器模式的应用实例:篮球翻译适配器 、适配器模式的适用场景 、适配器模式的优缺点

ZY-JIMMY 1838

C++之适配器(Adapter)模式

0. 简介 适配器模式是一种结构型设计模式, 它能将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。 根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。他和装饰器模式一样可以动态扩展一些遗留或者不好改动的代码。 1. 适配器模式结构 1.1 对象适配器 实现时使用了构成原则: 适配器实现了其中一个对象的接口, 并对另一

lovely_yoshino的博客 8228

45、C++ 适配器模式详解

本文深入探讨了C++中的适配器模式,涵盖函数适配器、std::bind、编译时适配器等多种实现方式,并通过丰富示例展示了其在多线程安全、接口转换、模板参数匹配等场景的应用。文章还比较了不同适配方式的优缺点,分析了模板别名的局限性,并介绍了适配器与装饰器模式的结合使用,帮助开发者提升代码灵活性与可维护性。

day7的博客 109

C++设计模式之适配器模式(adapter)(结构型)

一、结构型模式概述 结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。 结构型模式可以分为类结构型模式和对象结构型模式: •类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。 ...

janeqi1987的专栏 2074

C++适配器模式详解--设计模式(4)

Adapter模式来源:     在实际应用中,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。生活中笔记本电脑和手机等数码产品的充电器就是一个适配器,将家用220V的交流电转换为笔记本或手机正常工作所需的目标电压和电流。适配器起到一种转换和包装的作用。Adapter模式作用:     Adapter设计模式主要目的组合两个不...

程序猿老樊的博客 1224

40、C++设计模式:适配器模式与单例模式详解

本文深入探讨了 C++ 中两种常用的设计模式:适配器模式和单例模式。详细分析了适配器模式的多种实现方式,包括私有继承、关联以及作为包装类的使用,并通过数据库访问示例展示了其在实际开发中的应用。同时,文章对比了单例模式的简单实现与成对类实现方式,讨论了它们的优缺点及适用场景,特别是针对单例生命周期管理和线程安全问题进行了深入剖析。最后,总结了设计模式在提升代码可维护性、可扩展性和复用性方面的重要性,并为读者提供了选择合适设计模式的指导建议。

aa123的博客 65

设计模式C++实现15:适配器模式(Adapter)

设计模式C++实现15:适配器模式(Adapter)

319

龙虾 Skill 技能库|OpenClaw+Hermes 全集成 一键调用所有 AI 技能

龙虾 Skill 技能库、OpenClaw、Hermes Agent、AI 技能集成、本地 AI 自动化、办公工具、数字员工

weixin_42219287的博客 625

23种设计模式(C++)之 适配器(Adapter)模式

23种设计模式(C++)之 适配器(Adapter)模式23种设计模式(C++)之 适配器(Adapter)模式意图 23种设计模式(C++)之 适配器(Adapter)模式 意图 用于将一个类的接口转化成客户希望的另外一个接口。A ...

u012409346的博客 327

具身智能与空天具身智能:从理论到实践的跨领域融合

本文深入探讨了具身智能从理论到实践的发展,重点分析了空天具身智能这一前沿领域。文章阐述了如何为AI赋予“身体”,使其通过与环境实时交互进化智能,并详细拆解了构建空天智能体所需的核心技术模块,包括多模态感知、基于大模型的决策规划以及鲁棒控制。同时,结合山区电力线自主巡检等实战案例,展望了多智能体协同与标准化等未来方向。

weixin_29045585的博客 533

RPA实战:手把手教你打造抖音自动养号机器人(含避坑指南)

本文详细介绍了如何利用RPA技术从零构建一个智能化的抖音自动养号机器人。内容涵盖环境准备、核心工具选型、拟人化行为流程设计、代码实现模块拆解,并提供了关键的避坑指南与风控对抗策略,帮助开发者高效、稳定地实现账号自动化运营。

orange的博客 561

C++设计模式之适配器模式详解

适配器模式(Adapter Pattern)是一种结构型设计模式,它能使接口不兼容的类能够相互合作。这种模式通过将一个类的接口转换成客户端期望的另一个接口,解决了因接口不匹配而导致的类无法一起工作的问题。

weixin_38834817的博客 364

数字图像处理 基于matlab、opencv计算图像的梯度方向和梯度幅值

图像可以被视为标量场(即二维函数)。通过微分将标量场转换为矢量场。梯度是一个向量,描述了在x或y方向上移动时,图像变化的速度。我们使用导数来回答这样的问题,图像梯度的大小告诉图像变化的速度,而梯度的方向告诉图像变化最快的方向。因为梯度有方向和大小,所以将这些信息编码为向量是很自然的。该向量的长度提供了梯度的大小,而其方向提供了梯度方向。因为梯度在每个位置可能不同,所以我们在每个图像位置用不同的向量来表示它。

学以致用 知行合一 3202

C++适配器模式实战:类适配器与对象适配器详解与应用

在软件工程中,设计模式是解决常见问题的可复用方案,其中适配器模式专门处理接口不兼容问题。其核心原理是通过一个中间层(适配器)转换接口,使原本无法协同工作的类能够一起工作,体现了封装与抽象的设计思想。该模式的技术价值在于提升代码的复用性、降低模块间耦合度,并遵循开闭原则,使系统更易于维护和扩展。在实际应用场景中,适配器模式常用于集成第三方库、适配遗留代码、数据格式转换以及单元测试中的模拟对象注入。本文通过C++中的具体实现,深入探讨了类适配器和对象适配器两种路径,并结合智能指针、模板等现代C++特性,展示了如

weixin_29219189的博客 319

AI编程工具到底是初学者的绊脚石还是垫脚石?

现在是AI时代,我们要做的,是学会拥抱AI、使用AI,成为AI的驾驭者,如果你因为害怕使用AI学不到东西,那么大可不必,因为AI必然是今后的趋势,相信会用AI在今后的求职面试中也会有很大的占比。另外我之前写了多篇有关AI编程开发工具Trae的使用技巧和教程,需要的话你可以关注公众号后通过菜单栏获取。另外我也把所有Trae相关的文章整合到了腾讯ima知识库,感兴趣的可以关注公众号以后回复。

cpp加油站的专栏 188

uniapp [安卓苹果App端] - errMsg“: “request:fail abort statusCode:-1 不支持的URL(-1002)Uniapp真机运行APP网络请求报错失败排查

uniapp真机运行APP,网络请求报错errMsg“: “request:fail abort statusCode:-1 不支持的URL(-1002),uni.request网路请求报错,uniApp解决请求接口报错,uniapp app端打包上线后请求报错,真机运行测试请求失败,uniapp安卓app请求报错,uniapp苹果ios平台网络请求报错,uniapp真机预览请求失败怎么办,不是跨域问题,在H5中请求可以正常发送和接收,但在真机APP上请求报错,Hbuilder真机运行app网络请求报错,全

🏆 前端领域优质创作者 3089

C++设计模式 - 适配器模式详解

适配器模式:讲一个类的接口转换成客户期待的另一个接口,从而从根本上解决两个类无法在一起工作的情况。 最近在做一个任务管理的项目,那么任务管理就应该有任务的基本属性进行配置、修改、获取属性信息等基本操作。咱们主要查看任务的基本信息的获取这部分内容。 首先定义一个任务信息获取的接口类: //定义信息基类 class IInfo { public: IInfo(); ~IInfo(); //获...

wb175208的专栏 733

STM32电机PID速度控制

2.3 STM32电机PID速度控制 之前的文章,完成了直流减速电机的PWM控制、电机测速。本篇文章,将实现电机的速度闭环控制。 在公众号:小白学移动机器人,发送:速度PID,即可获得本篇文章的STM32工程文件以及相关资料。 2.3.1 解决的问题 解决带编码器直流电机的速度闭环问题。 2.3.2 PID理论 将偏差的比例、积分、微分,通过线性组合构成控制量,用控制量对被控对象进行控制,这样的控制器称为PID控制器。在连续空间中,我们通常探讨模拟PID的控制原理,如图所示: 我们这里用电机速度控制为例,

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 6万+

适配器模式详解:原理、C++代码实现、结构图、场景及优缺点

适配器模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。这可以让原本由于接口不兼容而不能在一起工作的类能够协同工作。适配器模式通常包括三个角色:目标接口(Target)、适配器(Adapter)和被适配者(Adaptee)。在上面的示例中,Target是目标接口,Adaptee是被适配者,Adapter是适配器。适配器Adapter实现了目标接口Target,并持有一个被适配者Adaptee的实例。

十年以上编程经验的干货分享 1622

SAP GR(Group Reporting)合并报表内容及功能简介(五)-合并和抵消

随着合并和收购数量的显著增加,企业在全球经济中面临着诸多挑战。其中最常见的是法律实体与子公司之间缺乏透明度,导致无法以经济高效的方式对账法律实体与子公司之间的公司间交易,从而造成结算出现重大延迟。公司间匹配和对账功能允许用户在关账过程中进行早期分析,以避免公司间差异,并缩短关账时的延迟。公司间匹配和对账功能交易级别匹配和实时对账基于各种组织维度(如公司、利润中心和合并单位)的灵活建模自动差异解决。应用内通信和工作流。与公司间抵销集成。

weixin_43853754的博客 4400

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++适配器模式:核心概念与四种实用变体详解

适配器模式是结构型设计模式的典型代表,其核心原理是通过中间层转换解决接口不兼容问题。在C++开发中,该模式通过编译时模板特化或运行时多态等机制,实现不同组件间的无缝协作。从工程实践角度看,适配器模式能有效降低系统耦合度,特别适用于第三方库集成、跨平台开发等场景。现代C++中的模板元编程、类型擦除等技术进一步扩展了适配器的应用边界,如STL风格的函数对象适配器可完美兼容标准算法库。本文重点解析模板适配器、多态适配器、函数对象适配器和代理适配器四种典型变体,结合文件操作、数据库驱动等真实案例,展示如何根据性能需

weixin_33326218的博客 223

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++适配器模式实现与应用详解

适配器模式是结构型设计模式的核心概念之一,通过接口转换实现不兼容组件间的协同工作。其核心原理是创建一个中间层,将目标接口转换为被适配者接口。在C++中,这种模式特别有价值,因为可以利用多重继承、模板元编程等语言特性实现零开销抽象。技术实现上可分为对象适配器(组合方式)和类适配器(继承方式),前者更灵活,后者更高效。典型应用场景包括整合第三方库、桥接新旧系统、统一异构接口等。通过模板化适配器和智能指针适配器等现代C++技术,开发者可以在保持类型安全的同时实现高效的接口转换。特别是在处理图形库封装、日志系统统一

weixin_27061475的博客 113

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++适配器模式详解:接口转换与系统集成实战

适配器模式是结构型设计模式的核心成员,通过接口转换解决组件协作难题。其核心原理是构建中间转换层,在不修改原有代码的前提下实现接口兼容。在C++开发中,适配器模式特别适合处理第三方库集成、遗留系统改造等场景,能有效降低模块间的耦合度。标准库中的stack/queue容器适配器、反向迭代器等都是经典实现案例。现代C++特性如lambda表达式、可变参数模板等可以大幅简化适配器实现,而结合智能指针的内存管理策略能规避常见陷阱。从工程实践角度看,适配器模式与工厂模式、观察者模式的组合使用,能够构建出更灵活的系统架构

weixin_32183107的博客 265

C++适配器模式详解:接口转换与实战应用

设计模式是软件工程中经过反复验证的经典解决方案,其中适配器模式专注于解决系统间接口不兼容的难题。其核心原理是在客户端与既有类之间引入一个中间转换层,将不匹配的接口翻译成调用方期望的形态,从而让原本无法协作的组件能够无缝配合。在C++工程实践中,由于语言缺少强制接口规范、项目生命周期普遍较长,且第三方库接口风格各异,适配器模式成为降低模块耦合、控制变动范围的重要工具。对象适配器与类适配器是两种典型实现,前者基于组合,灵活度更高,后者利用多重继承,适用于简单场景。实际应用中,适配器模式常被用于传感器接口统一、旧

weixin_33508411的博客 253
上一篇: 状态模式C++详解
下一篇: 机器人学运动模型
黑猫爱小鹿
博客等级 码龄8年 1万+粉丝 205原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值