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 作为委托
    • 装饰器可以 扩展或覆盖原有方法
    • 可以多层嵌套,功能可组合
相关推荐
做个文艺程序员3 小时前
第04篇:K8s 弹性伸缩实战:HPA、VPA、KEDA——Java SaaS 应对流量洪峰的秘密武器
java·容器·kubernetes·弹性伸缩·自动扩容·ai 推理伸缩
weelinking6 小时前
【产品】12_接入数据库——让数据永久保存
jvm·数据库·python·react.js·数据挖掘·前端框架·产品经理
石山代码6 小时前
ArrayList / HashMap / ConcurrentHashMap
java·开发语言
程序大视界7 小时前
【Python系列课程】Python正则表达式(下):环视、命名分组与日志实战
开发语言·python·正则表达式
TickDB7 小时前
美股行情 API 接入避坑:REST 快照、WebSocket 推送、盘前盘后数据的边界
人工智能·python·websocket·行情数据 api
枫叶v.7 小时前
Agent 分层存储架构设计:从记忆方法到中间件选型
开发语言·python
水兵没月7 小时前
逆向实战小记——某ToB商城网站分析学习
python·网络爬虫
AskHarries8 小时前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
程序员小远8 小时前
Python自动化测试框架及工具详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
daidaidaiyu8 小时前
ThingsBoard 规则链系统源码分析和自定义定时器
java