8、跟学23种设计模式(C++版):适配器模式

适配器模式(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方法中,它调用了OldPrinterprintOld方法;
4、 main:客户端代码中,我们创建了一个OldPrinter对象,并使用PrinterAdapter来适配它,使其符合NewPrinter接口的要求;

*

总结

适配器模式是一种结构型设计模式,通过引入适配器类,它将一个类的接口转换成另一个接口,从而使不兼容的接口可以协同工作。适配器模式具有接口转换、复用性和灵活性的特点,适用于使用现有类、互操作性和替代接口的场景。

END

今天是日更的第16/100天

封面图片:O~O

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: