新闻中心

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

2025-12-06
浏览次数:
返回列表
适配器模式通过中间层将不兼容接口转换为目标接口,使原有类可协同工作。在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++支持多重继承的场景,且适配器与被适配类在编译期就绑定。

使用对象适配器(组合)

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

// 对象适配器 - 使用组合
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();
    }
}

};

简小派 简小派

简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。

简小派 123 查看详情 简小派

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

使用示例

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

return 0;

}

输出结果:

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

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

以上就是C++如何实现一个适配器模式_C++将一个类的接口转换成客户希望的另外一个接口的详细内容,更多请关注其它相关文章!


# c++  # ai  # 关键在于  # 复用  # 中间层  # 如何实现  # 另外一个  # 游戏开发  # 转换成  # 代码复用  # stream  # ios  # seo交流访谈  # 伊犁州建设网站  # 虞城县关键词排名优化  # 新手怎样优化网站关键词  # 泾源网站建设案例  # 穆棱专业网站建设  # 国产网站建设应用范围  # 大型网站建设规划论文  # 软文营销推广值得信赖  # 批量伪原创seo  # 多个  # 边缘  # 的是 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 在J*a中如何隐藏复杂性_使用门面模式组织对象交互  Centos/Linux 系统下安装 composer 的完整步骤  LINUX怎么设置定时任务_LINUX crontab配置教程  手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析  2025俄罗斯Yandex最新入口 官方网站地址及浏览器下载指南  Django表单验证失败时保留用户输入数据的最佳实践  J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案  J*aScript中向JSON对象添加新属性的正确姿势  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责  支付宝如何管理隐私设置_支付宝隐私保护的配置技巧  台积电1.4nm工艺A14瞄准2028:10年来性能提升80%  如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版  Angular中父组件异步更新子组件复选框状态的实践指南  Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达  为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法  Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南  响应式图片在网页设计中的正确实现方法  Mac终端命令大全_Mac常用Terminal指令速查  漫蛙2正版漫画站 漫蛙2网页版快速访问入口  Go语言中JSON数据解码与字段访问指南  凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法  苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】  J*a编写用户注册与登录功能_掌握字符串与验证逻辑  顺丰快递查询系统 官方正版查询入口  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId  AO3网页版最新入口合集 Archive of Our Own在线访问指南  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法  Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑  如何在CSS中使用浮动制作导航栏_float实现水平菜单  html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】  J*aScript 字符串标签转换:使用正则表达式高效替换  AO3最新可访问网址 Archive of Our Own官方在线入口  React Router 嵌套组件中 URL 重定向问题的解决方案  Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】  狙击外星人小游戏开始_狙击外星人小游戏立即开始  c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  Golang如何安装Swagger工具_GoSwagger文档生成环境  qq游戏大厅官方下载_qq游戏免费下载安装入口  Go Martini框架:动态服务解码后的图片内容  动漫岛观看全网网 动漫岛在线正版动漫入口  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性  html两个JS只运行一个怎么办_让双JS在html中都运行方法【技巧】  TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南  126邮箱网页版官方入口 126邮箱账号在线登录平台 

搜索