什么是适配器模式?
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成另一个客户端所期望的接口。适配器模式通过在两个不兼容的接口之间添加一个适配器来实现接口的转换,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式有三个主要角色:
-
目标接口(Target):定义客户端期望的接口,适配器将目标接口转换成被适配者的接口。
-
被适配者(Adaptee):即被适配的类或接口,它定义了适配器需要转换的一组接口。
-
适配器(Adapter):实现目标接口,并包含一个对被适配者的引用,在适配器的方法中调用被适配者的相应方法。
// 目标接口
interface Target {
void request();
}
// 被适配者
class Adaptee {
void specificRequest() {
System.out.println("Specific request is called.");
}
}
// 适配器
class Adapter implements Target {
private Adaptee adaptee;
Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
adaptee.specificRequest();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target target = new Adapter(adaptee);
target.request();
}
}
从上述代码中可以看到,目标接口 Target
定义了客户端期望的接口,被适配者 Adaptee
定义了需要转换的接口。适配器 Adapter
实现了目标接口,并在其方法中调用被适配者的方法。
在客户端代码中,先创建一个被适配者的实例 adaptee
,然后通过适配器 Adapter
来创建目标接口的实例 target
。当调用 target.request()
方法时,实际上是调用了适配器中的 adaptee.specificRequest()
方法。适配器模式可以帮助在不修改现有代码的情况下实现接口的兼容性,从而提高代码的重用性和灵活性。
适配器模式常见的应用场景:
- 将第三方库或遗留代码的接口转换成客户端所期望的接口。
- 在扩展现有系统时,需要根据新的接口规范与已有代码进行集成。
- 在使用某个类时,发现其接口与需求不完全匹配,需要通过适配器进行接口转换。
适配器模式可以增加代码的可扩展性和可维护性,但也会增加一定的复杂性和间接性,因此在使用时需要权衡利弊,并根据具体情况决定是否使用适配器模式。