适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换为另一个类的接口,以满足客户端的需求。
适配器模式的主要目的是使不兼容的接口能够协同工作。它通过创建一个适配器类,该适配器类包装了现有类的接口,使其与目标接口相匹配。
适配器模式包含以下几个角色:
- 目标接口(Target Interface):客户端所期望的接口,适配器将现有类的接口转换为目标接口。
- 适配器(Adapter):实现目标接口,同时包含对现有类的引用,将现有类的接口转换为目标接口。
- 现有类(Adaptee):需要被适配的类,它提供了不兼容的接口。
下面是一个使用C++实现的适配器模式示例,假设我们有一个Rectangle
类,它提供了计算矩形面积的方法,但我们希望使用该类来计算正方形的面积(正方形是一种特殊的矩形):
#include <iostream>
// 目标接口
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()
方法来显示正方形的面积。
适配器模式可以帮助我们解决接口不兼容的问题,使不兼容的类能够一起工作。它提供了一种灵活的方式来适配现有类的接口,以满足客户端的需求。