适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口协同工作。通过引入一个适配器类,该模式将一个类的接口转换成客户端希望的另一个接口,从而使原本因接口不兼容而无法一起工作的类可以协同工作。
模式特点
1、 接口转换:适配器模式将一个类的接口转换成另一个接口,使接口不兼容的类能够一起工作;
2、 复用性:通过适配器模式,可以复用现有的类而不需要修改其源代码;
3、 灵活性:适配器模式允许在不修改原有代码的情况下,添加新的适配器,以适应不同的需求;
适用场景
1、 使用现有类:需要使用现有的类,但其接口不符合要求;
2、 互操作性:希望创建一个可以与现有对象协同工作的类,但这些对象的接口不兼容;
3、 替代接口:需要使用一些已有的子系统,而这些子系统的接口可能并不完全兼容当前系统的需求;
具体例子
我们将通过一个具体的例子来说明适配器模式在C++中的应用。假设我们有一个旧的打印系统,它使用的是旧接口(OldPrinter),而新的客户端代码希望使用一个新的打印接口(NewPrinter)。
-
旧的打印系统(旧接口)
#include <iostream>
#include <string>
class OldPrinter {
public:
void printOld(std::string text) {
std::cout << "Old Printer: " << text << std::endl;
}
};
-
新的打印接口
class NewPrinter {
public:
virtual void print(std::string text) = 0;
};
-
适配器类
class PrinterAdapter : public NewPrinter {
private:
OldPrinter* oldPrinter;
public:
PrinterAdapter(OldPrinter* oldPrinter) : oldPrinter(oldPrinter) {}
void print(std::string text) override {
oldPrinter->printOld(text);
}
};
-
客户端代码
int main() {
OldPrinter* oldPrinter = new OldPrinter();
NewPrinter* printer = new PrinterAdapter(oldPrinter);
printer->print("Hello, Adapter Pattern!");
delete oldPrinter;
delete printer;
return 0;
}
-
代码说明
1、 OldPrinter:这是一个旧的打印类,只有一个方法printOld
;
2、 NewPrinter:这是一个抽象的新打印接口,定义了一个纯虚方法print
;
3、 PrinterAdapter:这是一个适配器类,继承自NewPrinter
,并持有一个OldPrinter
的指针在print
方法中,它调用了OldPrinter
的printOld
方法;
4、 main:客户端代码中,我们创建了一个OldPrinter
对象,并使用PrinterAdapter
来适配它,使其符合NewPrinter
接口的要求;
总结
适配器模式是一种结构型设计模式,通过引入适配器类,它将一个类的接口转换成另一个接口,从而使不兼容的接口可以协同工作。适配器模式具有接口转换、复用性和灵活性的特点,适用于使用现有类、互操作性和替代接口的场景。
END
今天是日更的第16/100天
封面图片:O~O
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: