1. 接口转换器
  2. 当一个类不能直接访问另一个类时,中间加一个转换
  3. 例子:
    1. 电压转接头(我国和欧洲电压、国标和欧标插孔)
    2. visitor的使用:asm的transformer
      1. ClassReader====>ClassWriter(复制)
      2. ClassReader==>Adapter转接==>ClassWriter(想要的ClassWriter)
    3. java.io(详见代码
      1. 想要一行一行的读,但是从文件读取的时候用的是FileInputStream字节流不可以直接读
      2. 用InputStreamReader将字节流转换成Reader
      3. InputStreamReader和OutputStreamWriter是适配器
    4. odbc转jdbc(Bridge不是桥接模式,而是适配器模式
      1. 数据库sql server暴露odbc接口,但java只能访问jdbc
      2. jdbc如何访问odbc,中间来个转接器(驱动:JDBC-ODBC-Bridge)(见下图)
  4. 转换接口,暴露出可以用的接口
  5. 与装饰器模式很像(不再纠结使用什么模式)

UML类图

image.png


以java.io为例

  1. package com.mashibing.dp.adapter;
  2. import java.io.BufferedReader;
  3. import java.io.FileInputStream;
  4. import java.io.InputStreamReader;
  5. public class Main {
  6. public static void main(String[] args) throws Exception {
  7. FileInputStream fis = new FileInputStream("c:/test.text");
  8. InputStreamReader isr = new InputStreamReader(fis);
  9. BufferedReader br = new BufferedReader(isr);
  10. String line = br.readLine();
  11. while (line != null && !line.equals("")) {
  12. System.out.println(line);
  13. }
  14. br.close();
  15. }
  16. }

误区

  • 常见的Adapter类反而不是Adapter(也可以说是一种转换器)
    • WindowAdapter
    • KeyAdapter
    • 只是一种方便的编程方式,他不是适配器
  • odbc转jdbc====>Bridge不是桥接模式,而是适配器模式 (看的是只鞋实际上是吹风机,看上去像小猪佩奇实际上还是吹风机)
  • 以WindowListener接口举例:
    • 假如通过直接实现该接口来构建对象,那么就需要实现接口中的所有方法,即使有些方法是你不感兴趣的(不需要的)
    • 上面这样写太麻烦
    • 而是new一个WindowAdapter,他是一个抽象类实现了WindowListener接口,并实现了所有方法,但方法体为空
    • 这样就**只需要重写你自己关心的那个方法就行了**,而不必重写所有的方法
  • 有些接口中方法太多,搞个抽象类来实现这个接口,搞些空实现,自己的类去继承抽象类只实现自己想要的方法
  • 常见的×××Adapter就是上面这个意思,是为了方便编程

🤏随想

  1. OutputStreamWriter是从字符流到字节流的桥接:使用指定的字符集将写入其中的字符编码为字节。它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。
  2. InputStreamReader类是从字节流到字符流的桥接器:它使用指定的字符集读取字节并将它们解码为字符。 它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。每次调用一个InputStreamReader的read()方法都可能导致从底层字节输入流中读取一个或多个字节。 为了实现字节到字符的有效转换,可以从基础流中提取比满足当前读取操作所需的更多字节。为了获得最高效率,请考虑在BufferedReader中包装InputStreamReader

链接:https://blog.csdn.net/ai_bao_zi/article/details/81133476