本文由 AI 自动摘录整理,原始链接:彻底理解C++中的适配器模式!
推荐指数:8/10(推荐读原文)
背景
文章通过一个实际场景——将第三方日志库集成到现有系统——深入浅出地讲解了 C++ 中的适配器模式。从最简单的包装函数,到类适配器(继承),再到对象适配器(组合),逐步展示了解决接口不兼容问题的演进过程。
核心观点
适配器的本质:在两个不兼容的接口之间搭建桥梁,让它们能够协同工作,而无需修改任何一方的代码
类适配器 vs 对象适配器:类适配器使用多重继承,一个适配器只能绑定一个具体类;对象适配器使用组合持有基类指针,可以适配整个继承体系
组合优于继承:继承是"我是什么",编译时决定,绑定到具体类;组合是"我有什么",运行时可以指向基类的任意子类,灵活性更高
补充要点
问题场景:系统有统一的
ILogger接口,第三方库FastLogger接口完全不同(std::stringvsconst char*,log()/error()vswriteLog()+ level)包装函数的局限:只能做简单转换,无法参与面向对象体系(比如注册到需要
ILogger*的容器中)类适配器示例:
class LoggerAdapter : public ILogger, public FastLogger,通过继承同时实现接口和复用实现对象适配器优势:当第三方库新增
HighPerfLogger、LowPowerLogger等变种时,同一个适配器类通过持有FastLogger*基类指针即可适配所有子类运行时切换实现:对象适配器可以在运行时更换被适配对象,实现动态切换日志实现