- 接口转换器
- 当一个类不能直接访问另一个类时,中间加一个转换
- 例子:
- 电压转接头(我国和欧洲电压、国标和欧标插孔)
- visitor的使用:asm的transformer
- ClassReader====>ClassWriter(复制)
- ClassReader==>Adapter转接==>ClassWriter(想要的ClassWriter)
- java.io(详见代码)
- 想要一行一行的读,但是从文件读取的时候用的是FileInputStream字节流不可以直接读
- 用InputStreamReader将字节流转换成Reader
- InputStreamReader和OutputStreamWriter是适配器
- odbc转jdbc(Bridge不是桥接模式,而是适配器模式)
- 数据库sql server暴露odbc接口,但java只能访问jdbc
- jdbc如何访问odbc,中间来个转接器(驱动:JDBC-ODBC-Bridge)(见下图)
- 转换接口,暴露出可以用的接口
- 与装饰器模式很像(不再纠结使用什么模式)
UML类图
以java.io为例
package com.mashibing.dp.adapter;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("c:/test.text");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String line = br.readLine();
while (line != null && !line.equals("")) {
System.out.println(line);
}
br.close();
}
}
误区
- 常见的Adapter类反而不是Adapter(也可以说是一种转换器)
- WindowAdapter
- KeyAdapter
- 只是一种方便的编程方式,他不是适配器
- odbc转jdbc====>Bridge不是桥接模式,而是适配器模式 (看的是只鞋实际上是吹风机,看上去像小猪佩奇实际上还是吹风机)
- 以WindowListener接口举例:
- 假如通过直接实现该接口来构建对象,那么就需要实现接口中的所有方法,即使有些方法是你不感兴趣的(不需要的)
- 上面这样写太麻烦
- 而是new一个WindowAdapter,他是一个抽象类实现了WindowListener接口,并实现了所有方法,但方法体为空
- 这样就**只需要重写你自己关心的那个方法就行了**,而不必重写所有的方法
- 有些接口中方法太多,搞个抽象类来实现这个接口,搞些空实现,自己的类去继承抽象类只实现自己想要的方法
- 常见的×××Adapter就是上面这个意思,是为了方便编程
🤏随想
- OutputStreamWriter是从字符流到字节流的桥接:使用指定的字符集将写入其中的字符编码为字节。它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。
- InputStreamReader类是从字节流到字符流的桥接器:它使用指定的字符集读取字节并将它们解码为字符。 它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。每次调用一个InputStreamReader的read()方法都可能导致从底层字节输入流中读取一个或多个字节。 为了实现字节到字符的有效转换,可以从基础流中提取比满足当前读取操作所需的更多字节。为了获得最高效率,请考虑在BufferedReader中包装InputStreamReader
链接:https://blog.csdn.net/ai_bao_zi/article/details/81133476