适配器模式(Adapter)
适配器模式是一种结构型设计模式,用于使接口不兼容的类可以协同工作。通过使用适配器模式,可以将一个类的接口转换成客户端所期望的另一种接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。
1. 适配器模式的结构
适配器模式包含以下几个主要组件:
- Target(目标接口): 客户端期望的接口。
- Adapter(适配器): 通过继承或实现目标接口,将适配者的接口转换成目标接口。
- Adaptee(适配者): 需要适配的接口或类。
- Client(客户端): 通过目标接口调用适配器,使其能够与适配者协同工作。
2. Mermaid 关系图
以下是适配器模式的类图,用 Mermaid 表示:
classDiagram class Target { + request() : void } class Adapter { + request() : void } class Adaptee { + specificRequest() : void } class Client { + someOperation(t : Target) : void } Target <|-- Adapter Adapter --> Adaptee : "适配" Client --> Target : "使用"
3. 适配器模式的实现
Target 目标接口:
class Target {
public:
virtual ~Target() = default;
virtual void request() const = 0;
};
Adaptee 适配者类:
class Adaptee {
public:
void specificRequest() const {
std::cout << "Specific request from Adaptee\n";
}
};
Adapter 适配器类:
class Adapter : public Target {
private:
Adaptee* adaptee;
public:
Adapter(Adaptee* a) : adaptee(a) {}
void request() const override {
this->adaptee->specificRequest();
}
};
Client 客户端代码:
void ClientCode(const Target& target) {
target.request();
}
int main() {
Adaptee* adaptee = new Adaptee();
Adapter* adapter = new Adapter(adaptee);
ClientCode(*adapter);
delete adaptee;
delete adapter;
return 0;
}
4. 使用适配器模式
在客户端代码中,适配器将适配者的接口转换为客户端期望的接口。这样,客户端可以使用统一的目标接口与不同的适配者进行交互,而无需知道具体的适配者实现细节。
5. 总结
适配器模式通过转换接口使得不兼容的类能够协同工作,适用于系统中接口不兼容的情况。Mermaid 类图展示了目标接口、适配器、适配者和客户端之间的关系,帮助理解模式的结构和实现。