1. 什么是适配器

适配器模式Adapter是一种结构型设计模式,它可以将一个类的接口转换成客户希望的另一个接口,主要目的是充当两个不同接口之间的桥梁,使得原本接口不兼容的类能够一起工作。

2. 基本结构

适配器模式分为以下几个基本角色:

可以把适配器模式理解成拓展坞,起到转接的作用,原有的接口是USB,但是客户端需要使用type-c, 便使用拓展坞提供一个type-c接口给客户端使用

image-20240508213924354

  • 目标接口Target: 客户端希望使用的接口
  • 适配器类Adapter: 实现客户端使用的目标接口,持有一个需要适配的类实例。
  • 被适配者Adaptee: 需要被适配的类

这样,客户端就可以使用目标接口,而不需要对原来的Adaptee进行修改,Adapter起到一个转接扩展的作用。

3. 基本实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// 目标接口
interface Target {
void request();
}

// 被适配者类
class Adaptee {
void specificRequest() {
System.out.println("Specific request");
}
}

// 适配器类
class Adapter implements Target {
// 持有一个被适配者实例
private Adaptee adaptee;

public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}

@Override
public void request() {
// 调用被适配者类的方法
adaptee.specificRequest();
}
}

// 客户端代码
public class Client {
public static void main(String[] args) {
Target target = new Adapter(new Adaptee());
target.request();
}
}

4. 应用场景

在开发过程中,适配器模式往往扮演者“补救”和“扩展”的角色:

  • 当使用一个已经存在的类,但是它的接口与你的代码不兼容时,可以使用适配器模式。
  • 在系统扩展阶段需要增加新的类时,并且类的接口和系统现有的类不一致时,可以使用适配器模式。

使用适配器模式可以将客户端代码与具体的类解耦,客户端不需要知道被适配者的细节,客户端代码也不需要修改,这使得它具有良好的扩展性,但是这也势必导致系统变得更加复杂。

具体来说,适配器模式有着以下应用:

  • 不同的项目和库可能使用不同的日志框架,不同的日志框架提供的API也不同,因此引入了适配器模式使得不同的API适配为统一接口。
  • Spring MVC中,HandlerAdapter 接口是适配器模式的一种应用。它负责将处理器(Handler)适配到框架中,使得不同类型的处理器能够统一处理请求。
  • .NET中,DataAdapter 用于在数据源(如数据库)和 DataSet 之间建立适配器,将数据从数据源适配到 DataSet 中,以便在.NET应用程序中使用。

本站由 卡卡龙 使用 Stellar 1.29.1主题创建

本站访问量 次. 本文阅读量 次.