适配器模式Adapter Pattern概述适配器模式是一种结构型设计模式用于解决接口不兼容问题。它通过将一个类的接口转换成客户端期望的另一种接口使原本因接口不匹配而无法协同工作的类能够一起工作。适配器模式分为类适配器通过继承实现和对象适配器通过组合实现。适配器模式的核心角色目标接口Target客户端期望调用的接口定义标准化的方法。适配者Adaptee需要被适配的现有类或接口包含实际业务逻辑但接口不兼容。适配器Adapter通过继承或组合适配者实现目标接口的转换逻辑。类适配器实现基于继承通过多重继承C支持或单一继承扩展适配者类同时实现目标接口。// 目标接口 class Target { public: virtual void request() 0; virtual ~Target() default; }; // 适配者不兼容的接口 class Adaptee { public: void specificRequest() { std::cout Adaptees specific request std::endl; } }; // 类适配器继承Adaptee并实现Target class ClassAdapter : public Target, private Adaptee { public: void request() override { specificRequest(); // 调用父类Adaptee的方法 } };特点直接继承适配者耦合度高。需要支持多重继承C中可行。对象适配器实现基于组合通过组合方式持有适配者对象实现更松散的耦合。// 对象适配器组合Adaptee对象 class ObjectAdapter : public Target { private: Adaptee* adaptee; public: ObjectAdapter(Adaptee* a) : adaptee(a) {} void request() override { adaptee-specificRequest(); // 委托给Adaptee } };特点灵活性高适配器可动态替换适配者对象。符合“组合优于继承”原则。适配器模式的应用场景遗留代码整合将旧系统的接口适配到新系统。第三方库适配统一不同库的接口调用方式。接口版本兼容新老版本接口的平滑过渡。示例场景假设现有日志库接口为void log(const char*)而客户端需要void log(const std::string)可通过适配器转换参数类型。class StringLogAdapter : public LoggerTarget { private: LegacyLogger* legacyLogger; public: void log(const std::string msg) override { legacyLogger-log(msg.c_str()); // 转换string到const char* } };适配器模式的优缺点优点提高代码复用性无需修改现有代码。解耦目标与适配者符合开闭原则。缺点过度使用可能导致系统结构复杂化。类适配器需注意多重继承的复杂性。与其他模式的关系桥接模式关注接口与实现的分离而适配器关注接口转换。装饰器模式增强接口功能适配器是转换接口。外观模式简化复杂子系统适配器解决单个接口不匹配问题。通过合理使用适配器模式可有效解决接口兼容性问题提升系统的扩展性和维护性。share.cnbgluf.cn/Article/details/518027.HKMshare.lfrhsdk.cn/Article/details/074215.HKMshare.jvmsdkk.cn/Article/details/362592.HKMshare.jamwhkv.cn/Article/details/791215.HKMshare.wlncrof.cn/Article/details/110298.HKM