405. Java 文件操作基础 - 装饰者模式与 I/O Streams

文章目录

  • [405. Java 文件操作基础 - 装饰者模式与 I/O Streams](#405. Java 文件操作基础 - 装饰者模式与 I/O Streams)
    • [1️⃣ 装饰者模式的目的](#1️⃣ 装饰者模式的目的)
    • [2️⃣ Reader 类层次结构](#2️⃣ Reader 类层次结构)
      • [📌 核心概念](#📌 核心概念)
    • [3️⃣ 装饰者模式的关键点](#3️⃣ 装饰者模式的关键点)
    • [4️⃣ 示例代码:按行读取文件并打印行号](#4️⃣ 示例代码:按行读取文件并打印行号)
      • [✅ 讲解](#✅ 讲解)
    • [5️⃣ 小结](#5️⃣ 小结)

405. Java 文件操作基础 - 装饰者模式与 I/O Streams

1️⃣ 装饰者模式的目的

  • 装饰者模式(Decorator Pattern)23 种 GoF 设计模式之一。
  • Java I/O API 充分利用装饰者模式,扩展或修改已有类的行为,而无需修改原有类。
  • 优点:
    • 动态扩展功能
    • 保持类的开放-封闭原则(Open/Closed Principle)
    • 可以组合不同功能的装饰器(Decorator)

核心思想:把一个对象"包裹"起来,在保留原功能的基础上增加新功能。


2️⃣ Reader 类层次结构

java 复制代码
          Reader (抽象类)
             │
   ┌─────────┴─────────┐
   │                   │
CharArrayReader      FileReader  ... (StringReader 等)
   │
BufferedReader (装饰器)
   │
LineNumberReader (装饰器)

📌 核心概念

  1. Reader
    • 抽象基类,定义了读取字符的基本操作
  2. FileReader / CharArrayReader / StringReader
    • 提供具体数据源:文件、字符数组或字符串
  3. BufferedReader
    • 是 Reader 的装饰器,需要一个 Reader 实例作为委托(delegate)
    • 提供缓冲、按行读取、性能优化等功能
  4. LineNumberReader
    • 继承 BufferedReader,也是装饰器
    • 在原有功能基础上增加行号跟踪

3️⃣ 装饰者模式的关键点

  • 组合优先于继承
    • BufferedReader 内部保存一个 Reader 对象,而不是继承 FileReader 的具体实现
  • 增加功能而不修改原类
    • 例如 BufferedReader 可以提供 readLine() 方法,而 FileReader 并没有
  • 可以多层嵌套
    • 例如 new LineNumberReader(new BufferedReader(new FileReader("file.txt")))

4️⃣ 示例代码:按行读取文件并打印行号

java 复制代码
import java.io.*;

public class DecoratorIODemo {
    public static void main(String[] args) {
        File file = new File("sample.txt");

        try (LineNumberReader lnr = 
                new LineNumberReader(
                    new BufferedReader(
                        new FileReader(file)))) {

            String line;
            while ((line = lnr.readLine()) != null) {
                System.out.println("Line " + lnr.getLineNumber() + ": " + line);
            }

        } catch (IOException e) {
            System.err.println("I/O Exception: " + e.getMessage());
        }
    }
}

✅ 讲解

  1. FileReader → 读取文件
  2. BufferedReader → 增加缓冲,提高效率
  3. LineNumberReader → 增加行号功能
  4. 多层装饰器组合
    • 可以根据需要自由组合 Reader 功能
    • 保留原始对象的行为,同时扩展新功能

5️⃣ 小结

  • Java I/O API 使用装饰者模式极大增强灵活性
  • 常见装饰器:
    • BufferedReader / BufferedWriter → 缓冲、按行处理
    • LineNumberReader → 行号追踪
    • PrintWriter → 格式化输出
  • 核心点:
    • 装饰器 接受一个 Reader/Writer 作为委托
    • 装饰器可以 扩展或覆盖原有方法
    • 可以多层嵌套,功能可组合
相关推荐
xiufeia1 小时前
后端项目初始化的一些小坑点
java·junit·maven·idea
丑八怪大丑1 小时前
JDBC基础篇
java·sql
Unbelievabletobe1 小时前
免费外汇api的响应时间在不同时段下的波动分析
大数据·开发语言·前端·python
wang3zc1 小时前
CSS如何实现元素镜像翻转_使用transformscalex负值
jvm·数据库·python
zyq99101_11 小时前
递归与动态规划实战代码解析
python·算法·蓝桥杯
CLX05051 小时前
Golang如何做图片处理缩放_Golang图片处理教程【收藏】
jvm·数据库·python
2301_812539671 小时前
mysql如何限制用户连接数_使用MAX_USER_CONNECTIONS优化并发
jvm·数据库·python
环流_1 小时前
Redis:epoll和IO多路复用
java·redis·mybatis
Chase_______1 小时前
Java基础语言 ④ :面向对象核心——构造方法、this关键字与对象内存模型详解
java·开发语言·面向对象·类与对象