← 返回博客列表

模式特点

将一个类的接口转换成客户端期望的另一个接口。适配器模式让原本接口不兼容的类可以一起工作。

类图

类图

应用场景

示例代码(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"); }