适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。它允许不兼容的类能够一起工作,通过适配器将一个类的接口转换成另一个类的接口。
适配器模式通常在以下情况下使用:
适配器模式涉及三个主要角色:
下面是一个简单的Java示例,展示了适配器模式的用法。假设我们有一个已存在的LegacyRectangle
类,它有一个calculateArea()
方法来计算矩形的面积。但是,我们希望使用一个新的Rectangle
接口,该接口有一个getArea()
方法来计算矩形的面积。我们可以使用适配器模式来实现这个转换:
// 目标接口
interface Rectangle {
double getArea();
}
// 适配者类
class LegacyRectangle {
double calculateArea() {
// 计算矩形的面积
return 10.0;
}
}
// 适配器类
class RectangleAdapter implements Rectangle {
private LegacyRectangle legacyRectangle;
public RectangleAdapter(LegacyRectangle legacyRectangle) {
this.legacyRectangle = legacyRectangle;
}
@Override
public double getArea() {
// 调用适配者类的方法,并进行适配转换
return legacyRectangle.calculateArea();
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
LegacyRectangle legacyRectangle = new LegacyRectangle();
Rectangle rectangle = new RectangleAdapter(legacyRectangle);
double area = rectangle.getArea();
System.out.println("Area: " + area);
}
}
在上面的示例中,LegacyRectangle
是适配者类,它有一个calculateArea()
方法来计算矩形的面积。Rectangle
是目标接口,它定义了一个getArea()
方法。RectangleAdapter
是适配器类,它实现了Rectangle
接口,并在内部使用适配者类的方法来实现getArea()
方法。
通过适配器模式,我们可以在不修改现有代码的情况下,将LegacyRectangle
类的功能适配到新的Rectangle
接口中,使得客户端可以通过Rectangle
接口调用适配者类的功能。这样,我们就实现了接口之间的适配和兼容。