彻底理解C++中的适配器模式!

本文由 AI 自动摘录整理,原始链接:彻底理解C++中的适配器模式!

推荐指数:8/10(推荐读原文)

背景

文章通过一个实际场景——将第三方日志库集成到现有系统——深入浅出地讲解了 C++ 中的适配器模式。从最简单的包装函数,到类适配器(继承),再到对象适配器(组合),逐步展示了解决接口不兼容问题的演进过程。

核心观点

  • 适配器的本质:在两个不兼容的接口之间搭建桥梁,让它们能够协同工作,而无需修改任何一方的代码

  • 类适配器 vs 对象适配器:类适配器使用多重继承,一个适配器只能绑定一个具体类;对象适配器使用组合持有基类指针,可以适配整个继承体系

  • 组合优于继承:继承是"我是什么",编译时决定,绑定到具体类;组合是"我有什么",运行时可以指向基类的任意子类,灵活性更高

补充要点

  • 问题场景:系统有统一的 ILogger 接口,第三方库 FastLogger 接口完全不同(std::string vs const char*,log()/error() vs writeLog() + level)

  • 包装函数的局限:只能做简单转换,无法参与面向对象体系(比如注册到需要 ILogger* 的容器中)

  • 类适配器示例:class LoggerAdapter : public ILogger, public FastLogger,通过继承同时实现接口和复用实现

  • 对象适配器优势:当第三方库新增 HighPerfLogger、LowPowerLogger 等变种时,同一个适配器类通过持有 FastLogger* 基类指针即可适配所有子类

  • 运行时切换实现:对象适配器可以在运行时更换被适配对象,实现动态切换日志实现