Java IO包中哪些设计模式应用详解?

摘要:Java IO包(java.io)是设计模式应用的经典案例,其核心类库通过多种设计模式解决了“不同数据源数据类型的读写”“功能扩展”“资源管理”等核心问题。下面我会逐一拆解IO包中用到的核心设计模式,结合源码示例和使用场景讲清楚每个模式的
Java IO包(java.io)是设计模式应用的经典案例,其核心类库通过多种设计模式解决了“不同数据源/数据类型的读写”“功能扩展”“资源管理”等核心问题。下面我会逐一拆解IO包中用到的核心设计模式,结合源码示例和使用场景讲清楚每个模式的应用方式。 一、装饰器模式(Decorator Pattern) 核心作用 动态地给一个对象添加额外的功能,且不改变其原有结构,是继承的灵活替代方案。 IO包中的应用场景 IO包中字节流/字符流的功能扩展完全基于装饰器模式实现: 抽象组件(Component):InputStream/OutputStream(字节流)、Reader/Writer(字符流)——定义了IO操作的核心接口; 具体组件(ConcreteComponent):FileInputStream/FileOutputStream、FileReader/FileWriter——基础的数据源实现(直接操作文件); 装饰器抽象类(Decorator):FilterInputStream/FilterOutputStream、FilterReader/FilterWriter——继承自核心组件,持有一个核心组件的引用; 具体装饰器(ConcreteDecorator):BufferedInputStream(缓冲)、DataInputStream(基本类型读写)、InputStreamReader(字节转字符)——给基础流添加额外功能。 代码示例(装饰器模式核心体现) import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class DecoratorPatternDemo { public static void main(String[] args) { // 1. 基础组件:FileInputStream(直接读文件,无缓冲) try (InputStream fileIn = new FileInputStream("test.txt"); // 2. 装饰器:BufferedInputStream(给基础流添加缓冲功能) InputStream bufferedIn = new BufferedInputStream(fileIn); // 可叠加多个装饰器:比如再套DataInputStream(添加基本类型读写) // DataInputStream dataIn = new DataInputStream(bufferedIn); ) { int data; // 缓冲流通过预读数据减少磁盘IO,功能扩展但不改变InputStream接口 while ((data = bufferedIn.read()) != -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); } } } 关键特点 装饰器和被装饰者实现同一个接口(如都继承InputStream),对外暴露统一API; 可叠加多个装饰器(如BufferedInputStream + DataInputStream),灵活组合功能; 无需修改原有类代码,符合“开闭原则”。 二、适配器模式(Adapter Pattern) 核心作用 将一个类的接口转换成客户期望的另一个接口,解决接口不兼容的问题。 IO包中的应用场景 最典型的是字节流与字符流的适配: 字节流(InputStream/OutputStream):处理二进制数据; 字符流(Reader/Writer):处理文本数据(按字符编码); 适配器类:InputStreamReader(字节流→字符流)、OutputStreamWriter(字节流→字符流)。
阅读全文