模式特点
将一个类的接口转换成客户端期望的另一个接口。适配器模式让原本接口不兼容的类可以一起工作。
- 解决已有类接口与目标接口不匹配的问题
- 分为类适配器(多继承)和对象适配器(组合)两种
- 不修改原有代码即可实现接口兼容
类图
应用场景
- Qt 中 QAbstractItemModel 适配不同数据源到统一视图
- 第三方库接口封装:将不兼容的 C 接口适配为 C++ 面向对象接口
- 遗留系统集成:旧系统接口适配到新架构
- 跨平台适配:不同平台 API 统一封装
- 协议转换:WebSocket 适配为 HTTP 接口
示例代码(C++)
// 目标接口 class ILogTarget { public: virtual void logMessage(const std::string& msg) = 0; virtual ~ILogTarget() = default; }; // 已有的旧日志类(接口不兼容) class OldLogger { public: void writeLog(const char* text, int level) { std::cout << "[Level " << level << "] " << text << std::endl; } }; // 对象适配器 class LoggerAdapter : public ILogTarget { OldLogger* m_oldLogger; public: LoggerAdapter(OldLogger* logger) : m_oldLogger(logger) {} void logMessage(const std::string& msg) override { m_oldLogger->writeLog(msg.c_str(), 1); // 转换调用 } }; // 客户端使用统一接口 void doLog(ILogTarget* logger) { logger->logMessage("Hello"); }