📖 介绍
适配器模式(Adapter / Wrapper)是一种 结构型模式。
通过适配器模式,可以将一个类A的接口,转化成一个类B,以满足一些方法的调用。
如类A是一个第三方、遗留类等,已经被其他地方使用,无法更改,通过适配器模式的思想,通过一个中间的类,封装复杂的转化过程,转换为需要的类型。
🎈 实现方式
🎗️ 实现一个中间类,实现/继承 需要的类型
🎗️ 将需要被转换的类A,作为中间类的成员对象
🎗️ 在类A中实现相关方法,进行适配
🎗️ 最后,所有的相关工作,都会被委托给中间类
☕ Java 中的适配器模式
当我们现在的数据是数组类型时 String[]
,现在调用的方法需要传入 List<String>
对象,可以通过工具类进行转换。
1
2
3
4
| // String[] ---Arrays.asList()---> List<String>
// Arrays.asList() 相当于一个 Adapter
String[] data = new String[] {"one", "two", "three"};
List<String> dataList = Arrays.asList(data); // 这里的 List 是一个内部类
|
🛠️ 实现
1
2
3
4
5
6
7
| class Task implement Callable<String> {
@Override
public String call() throws Exception {
System.out.println("这是一个现有的任务");
return "这是一个现有的任务";
}
}
|
1
2
3
4
5
| // 现在某处,需要使用 Thread 运行线程方法
// ⚠ new Thread(new Runnable()) 不能接收 Callable 对象
// 需要使用适配器模式,将 Callable -----> Runnable
Callable<String> task = new Task();
new Thread(new RunnableAdapter(task)).start();
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| // 1) 实现目标接口 Runnable
// 2) 在目标接口中,持有 Callable 对象,对其进行适配
// 3) 在目标接口的方法内部,调用待转换的方法
public class RunnableAdapter implements Runnable {
private Callable<?> callable;
public RunnableAdapter(Callable<?> callable) {
this.callable = callable;
}
@Override
public void run() {
try {
callable.call();
} catch (Exception e) {
throw new RuntimeException;
}
}
}
|