适配器模式(Adapter Pattern)

适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换为另一个类的接口,以满足客户端的需求。

适配器模式的主要目的是使不兼容的接口能够协同工作。它通过创建一个适配器类,该适配器类包装了现有类的接口,使其与目标接口相匹配。

适配器模式包含以下几个角色:

  1. 目标接口(Target Interface):客户端所期望的接口,适配器将现有类的接口转换为目标接口。
  2. 适配器(Adapter):实现目标接口,同时包含对现有类的引用,将现有类的接口转换为目标接口。
  3. 现有类(Adaptee):需要被适配的类,它提供了不兼容的接口。

下面是一个使用C++实现的适配器模式示例,假设我们有一个Rectangle类,它提供了计算矩形面积的方法,但我们希望使用该类来计算正方形的面积(正方形是一种特殊的矩形):

#include 

// 目标接口
class Shape {
public:
    virtual void displayArea() = 0;
};

// 矩形类(现有类)
class Rectangle {
public:
    void setWidth(int width) {
        this->width = width;
    }

    void setHeight(int height) {
        this->height = height;
    }

    int getWidth() {
        return width;
    }

    int getHeight() {
        return height;
    }

    void calculateArea() {
        int area = width * height;
        std::cout << "Rectangle Area: " << area << std::endl;
    }

private:
    int width;
    int height;
};

// 适配器类
class SquareAdapter : public Shape {
public:
    SquareAdapter(int sideLength) {
        rectangle.setWidth(sideLength);
        rectangle.setHeight(sideLength);
    }

    void displayArea() override {
        rectangle.calculateArea();
    }

private:
    Rectangle rectangle;
};

int main() {
    Shape* shape = new SquareAdapter(5);
    shape->displayArea();  // 输出: Rectangle Area: 25

    delete shape;

    return 0;
}

在上述示例中,我们有一个现有类Rectangle,它提供了计算矩形面积的方法。然而,我们希望使用该类来计算正方形的面积,这就需要创建一个适配器类SquareAdapter,它实现了目标接口Shape并包装了Rectangle类的功能。

适配器类SquareAdapter在构造函数中接收正方形的边长,并将该边长设置为Rectangle对象的宽度和高度。然后,在displayArea()方法中,适配器调用Rectangle对象的calculateArea()方法来计算面积。

main()函数中,我们使用适配器类来创建一个适配器对象,并通过调用displayArea()方法来显示正方形的面积。

适配器模式可以帮助我们解决接口不兼容的问题,使不兼容的类能够一起工作。它提供了一种灵活的方式来适配现有类的接口,以满足客户端的需求。

你可能感兴趣的:(适配器模式,设计模式)