适配器模式通过中间层将不兼容接口转换为目标接口,使原有类可协同工作。在C++中,类适配器利用多重继承继承目标接口和被适配类,实现接口转换;对象适配器则通过组合方式持有被适配对象,灵活性更高,支持运行时注入。两种方式均实现request方法调用specificRequest,输出“Adaptee: 特殊请求”,从而让旧代码无缝接入新系统,关键在于解耦接口差异,选择取决于继承限制与扩展需求。

适配器模式用于将一个类的接口转换成客户期望的另一个接口,让原本不兼容的类可以一起工作。在C++中,可以通过类继承或对象组合的方式来实现适配器模式。
适配器模式的核心思想
当现有类的接口与客户端期望的接口不匹配时,适配器充当“中间层”,把原接口“翻译”成目标接口。这种模式常用于系统集成、第三方库封装或遗留代码复用。
使用类适配器(多重继承)
通过多重继承同时继承目标接口和被适配类,再在适配器中实现接口转换。
#include// 目标接口class Target {public:virtual void request() {std::cout << "Target: 正常请求" << std::endl;}virtual ~Target() = default;};
// 被适配的类class Adaptee {public:void specificRequest() {std::cout << "Adaptee: 特殊请求" << std::endl;}};
// 类适配器 - 使用多重继承class ClassAdapter : public Target, private Adaptee {public:void request() override {specificRequest(); // 调用被适配类的方法}};
这种方式简洁,但只适用于C++支持多重继承的场景,且适配器与被适配类在编译期就绑定。
立即学习“C++免费学习笔记(深入)”;
使用对象适配器(组合)
更常用的方式是通过组合,在适配器内部持有被适配对象的实例。
// 对象适配器 - 使用组合class ObjectAdapter : public Target {private: Adaptee* adaptee; // 持有被适配对象public:explicit ObjectAdapter(Adaptee* a) : adaptee(a) {}
void request() override { if (adaptee) { adaptee->specificRequest(); }}
};
对象适配器更灵活,支持运行时注入被适配对象,也更容易扩展多个适配对象。
使用示例
int main() { // 类适配器使用 ClassAdapter classAdapter; classAdapter.request();// 对象适配器使用Adaptee adaptee;ObjectAdapter objectAdapter(&adaptee);objectAdapter.request();return 0;
}
输出结果:
Target: 正常请求 → 实际调用的是 Adaptee 的方法
基本上就这些。适配器模式的关键在于解耦接口差异,让旧代码能无缝接入新系统。选择类适配器还是对象适配器,取决于是否需要多继承以及灵活性要求。
以上就是C++如何实现一个适配器模式_C++将一个类的接口转换成客户希望的另外一个接口的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1488154.html
微信扫一扫
支付宝扫一扫