适配器模式是一种结构型设计模式,它允许接口不兼容的类之间进行合作。它通过引入一个适配器来充当两个不兼容接口之间的中间层,使得它们可以一起工作。
设计原理:
目标接口(Target): 定义客户端使用的接口。
适配器(Adapter): 实现目标接口,并持有一个被适配的对象,负责将客户端请求转发给被适配对象。
被适配对象(Adaptee): 包含了需要被适配的功能,但其接口与目标接口不兼容。
适配器模式将被适配对象与客户端解耦,使得它们可以独立进行变化。
特点:
解耦性: 适配器模式使得客户端与被适配对象解耦,客户端只需要与目标接口交互,而不需要直接与被适配对象交互。
复用性: 可以重用现有的类,而不需要修改其原有的代码。
灵活性: 可以动态地替换适配器,以适应不同的适配需求。
透明性: 客户端无需知道适配器的存在,它只需要与目标接口交互即可。
在这个例子中,Target 是目标接口,Adaptee 是被适配对象,它包含了一个特定的请求 specificRequest。Adapter 是适配器,它继承自 Target 并私有继承了 Adaptee,在其实现中调用了 Adaptee 的特定请求。客户端通过适配器访问被适配对象的功能,而不需要直接与被适配对象交互。
#include <iostream>
// 目标接口
class Target {
public:
virtual ~Target() {}
virtual void request() const = 0;
};
// 被适配对象
class Adaptee {
public:
void specificRequest() const {
std::cout << "Adaptee specificRequest" << std::endl;
}
};
// 类适配器,继承自Target并持有Adaptee对象
class Adapter : public Target, private Adaptee {
public:
void request() const override {
specificRequest(); // 调用被适配对象的特定请求
}
};
int main() {
// 使用适配器模式将被适配对象转换为目标接口
Target* adapter = new Adapter();
adapter->request(); // 通过适配器调用被适配对象的特定请求
delete adapter;
return 0;
}