讲师中心 微信公众号
AI工具推荐 视频效率加速

C++如何实现一个适配器模式_C++将一个类的接口转换成客户希望的另外一个接口

夜雪酱_9792

夜雪酱_9792

发布时间:2025-12-06 23:09:06

|

508人浏览过

|

来源于php中文网

原创

适配器模式通过中间层将不兼容接口转换为目标接口,使原有类可协同工作。在C++中,类适配器利用多重继承继承目标接口和被适配类,实现接口转换;对象适配器则通过组合方式持有被适配对象,灵活性更高,支持运行时注入。两种方式均实现request方法调用specificRequest,输出“Adaptee: 特殊请求”,从而让旧代码无缝接入新系统,关键在于解耦接口差异,选择取决于继承限制与扩展需求。

c++如何实现一个适配器模式_c++将一个类的接口转换成客户希望的另外一个接口

适配器模式用于将一个类的接口转换成客户期望的另一个接口,让原本不兼容的类可以一起工作。在C++中,可以通过类继承或对象组合的方式来实现适配器模式。

适配器模式的核心思想

当现有类的接口与客户端期望的接口不匹配时,适配器充当“中间层”,把原接口“翻译”成目标接口。这种模式常用于系统集成、第三方库封装或遗留代码复用。

使用类适配器(多重继承)

通过多重继承同时继承目标接口和被适配类,再在适配器中实现接口转换。

#include <iostream>
<p>// 目标接口
class Target {
public:
virtual void request() {
std::cout << "Target: 正常请求" << std::endl;
}
virtual ~Target() = default;
};</p><p>// 被适配的类
class Adaptee {
public:
void specificRequest() {
std::cout << "Adaptee: 特殊请求" << std::endl;
}
};</p><p>// 类适配器 - 使用多重继承
class ClassAdapter : public Target, private Adaptee {
public:
void request() override {
specificRequest(); // 调用被适配类的方法
}
};</p>

这种方式简洁,但只适用于C++支持多重继承的场景,且适配器与被适配类在编译期就绑定。

立即学习“C++免费学习笔记(深入)”;

使用对象适配器(组合)

更常用的方式是通过组合,在适配器内部持有被适配对象的实例。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
// 对象适配器 - 使用组合
class ObjectAdapter : public Target {
private:
    Adaptee* adaptee; // 持有被适配对象
<p>public:
explicit ObjectAdapter(Adaptee* a) : adaptee(a) {}</p><pre class='brush:php;toolbar:false;'>void request() override {
    if (adaptee) {
        adaptee->specificRequest();
    }
}

};

对象适配器更灵活,支持运行时注入被适配对象,也更容易扩展多个适配对象。

使用示例

int main() {
    // 类适配器使用
    ClassAdapter classAdapter;
    classAdapter.request();
<pre class='brush:php;toolbar:false;'>// 对象适配器使用
Adaptee adaptee;
ObjectAdapter objectAdapter(&adaptee);
objectAdapter.request();

return 0;

}

输出结果:

Target: 正常请求 → 实际调用的是 Adaptee 的方法

基本上就这些。适配器模式的关键在于解耦接口差异,让旧代码能无缝接入新系统。选择类适配器还是对象适配器,取决于是否需要多继承以及灵活性要求。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
java多继承如何实现
java多继承如何实现

本专题整合了java多继承相关内容以及教程,阅读专题下面的文章了解更多详细内容。

438

2025.10.28

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3208

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

5209

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3849

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

486

2026.01.19

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

0

2026.11.02

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

0

2026.11.02

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

100

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn