适配器模式的定义
适配器模式(Adapter Pattern)是一种结构型设计模式,用于解决接口不兼容问题。通过将一个类的接口转换成客户端期望的另一个接口,使原本因接口不匹配而无法工作的类能够协同工作。
核心角色
目标接口(Target):客户端期望的接口,可以是抽象类或接口。
适配器(Adapter):实现目标接口,并持有被适配者的实例,通过调用被适配者的方法实现接口转换。
被适配者(Adaptee):需要被适配的现有类或接口
实现方式
适配器继承被适配者并实现目标接口,直接复用被适配者的方法。
类适配器(通过继承)
适配器继承被适配者并实现目标接口,直接复用被适配者的方法。
// 目标接口
interface Target {
void request();
}
// 被适配者
class Adaptee {
void specificRequest() {
System.out.println("Adaptee method called");
}
}
// 类适配器
class ClassAdapter extends Adaptee implements Target {
@Override
public void request() {
specificRequest(); // 调用被适配者的方法
}
}
对象适配器(通过组合)
适配器持有被适配者的实例,通过委托调用其方法。
// 对象适配器
class ObjectAdapter implements Target {
private Adaptee adaptee;
public ObjectAdapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
adaptee.specificRequest();
}
}
应用场景
1.旧系统接口与新系统不兼容时,通过适配器复用旧代码。
2.需要使用第三方库但接口与现有代码不匹配时。
3.统一多个类的接口以简化客户端调用。
示例代码(客户端调用)
public class Client {
public static void main(String[] args) {
// 类适配器调用
Target classAdapter = new ClassAdapter();
classAdapter.request();
// 对象适配器调用
Adaptee adaptee = new Adaptee();
Target objectAdapter = new ObjectAdapter(adaptee);
objectAdapter.request();
}
}