6. 适配器模式 -- 接口不同,转换器
简介
适配器模式(Adapter Pattern)是一种结构型设计模式,用于解决两个不兼容接口之间的兼容性问题。它允许一个类(适配器)将一个接口转换成另一个客户端代码期望的接口,以便它们可以一起工作。
使用场景
适配器模式是在以下情况下特别有用的:
集成旧系统:当你需要将新系统与已经存在的旧系统或第三方库集成时,可能会发现它们的接口不兼容。适配器模式允许你创建一个适配器,以便新系统可以与旧系统进行通信,而不必修改旧系统的源代码。
复用已有类:有时,你可能希望重用一个已有的类,但它的接口与你的要求不匹配。适配器模式允许你创建一个适配器类,将已有类包装起来,以便符合你的需求。
多态性支持:当你希望让不同类之间实现多态性,但它们具有不同的接口时,适配器模式可以帮助你将它们的接口统一,使它们可以一起工作。
接口扩展:有时,你可能需要扩展一个接口的功能,但又不希望改变所有实现该接口的类。适配器模式允许你创建一个适配器,只在需要时添加或修改接口的某些方法。
数据转换:当需要将一种数据格式或协议转换为另一种格式或协议时,适配器模式可以用于数据转换和兼容性处理。
统一接口:当你希望统一不同类或组件的接口,以便它们可以以相同的方式被客户端代码调用时,适配器模式可以提供一个统一的接口。
总之,适配器模式适用于各种情况,其中不同组件或类的接口不兼容,但需要协同工作或被统一。它有助于减少系统中的代码耦合,并提高代码的可维护性和扩展性。
角色
适配器模式通常涉及以下几个角色:
- 目标接口(Target):这是客户端代码所期望的接口。客户端代码通过与目标接口交互来完成特定任务。
- 适配器(Adapter):适配器是一个中间类,它实现了目标接口,并持有一个对被适配者的引用。适配器的主要任务是将客户端代码的请求转发给被适配者,从而使被适配者的接口与目标接口兼容。
- 被适配者(Adaptee):被适配者是需要被适配的类或接口,它具有客户端代码不期望的接口。适配器将被适配者的接口转化为目标接口。
实现
cpp
// 适配器模式
// 时间:2023-10-29
// 作者:@conceal
#include <iostream>
#include <string>
using namespace std;
// 适配者类
class Adaptee
{
public:
void specificRequest()
{
cout << "适配者类的特殊请求" << endl;
}
};
// 目标抽象类
class Target
{
public:
virtual void request() = 0;
};
// 适配器类
class Adapter : public Target
{
public:
Adapter(Adaptee *adaptee)
{
this->adaptee = adaptee;
}
void request()
{
adaptee->specificRequest();
}
private:
Adaptee *adaptee;
};
int main()
{
Adaptee *adaptee = new Adaptee();
Target *target = new Adapter(adaptee);
target->request();
return 0;
}
输出
shell
适配者类的特殊请求