本文最后更新于 2025-11-13,文章内容可能已经过时。

Java IO流主要使用了以下几种设计模式,其中装饰器模式是最核心、最广泛使用的

1. 装饰器模式(Decorator Pattern)

这是Java IO流中使用最核心的设计模式,用于增强原始流的功能,而不改变其接口。

  • 原理:通过组合而非继承来扩展功能,可以嵌套使用多个装饰器

  • 实现:FilterInputStream(输入流装饰器)和FilterOutputStream(输出流装饰器)是核心

  • 典型应用

    // 字节流装饰示例
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file.txt"));
    
    // 字符流装饰示例
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file.txt"), "UTF-8"));
    
  • 优势:避免了为每个流子类创建专门的装饰类,实现灵活组合

2. 适配器模式(Adapter Pattern)

  • 作用:解决字节流和字符流之间的接口不兼容问题
  • 实现
    • InputStreamReader:将字节流转换为字符流
    • OutputStreamWriter:将字符流转换为字节流
  • 原理:通过组合方式(对象适配器),将字节流对象适配成字符流对象

3. 工厂模式(Factory Pattern)

  • 应用场景:NIO中
  • 典型例子
    • Files.newInputStream():创建InputStream对象(静态工厂)
    • Paths.get():创建Path对象(静态工厂)
    • ZipFileSystem.getPath():创建Path对象(简单工厂)

4. 观察者模式(Observer Pattern)

  • 应用场景:NIO中的文件目录监听服务
  • 实现
    • WatchService:观察者
    • Watchable:被观察者

为什么使用装饰器模式?

"如果InputStream的子类比较少的话,这样做是没问题的。不过,InputStream的子类实在太多,继承关系也太复杂了。如果我们为每一个子类都定制一个对应的缓冲输入流,那岂不是太麻烦了。"

装饰器模式使Java IO流能够:

  • 避免类爆炸(不需要为每个流子类创建专门的装饰类)
  • 实现功能的灵活组合
  • 保持接口一致性
  • 提高代码复用率

总结:Java IO流的核心设计模式是装饰器模式,它让流的处理变得灵活、高效,能够通过简单的组合实现复杂的功能。而适配器模式则解决了字节流和字符流之间的接口兼容问题。