IO流/包装类的实现原理

IO流/包装类的实现原理

首先,下方是IO的关系图

关系图

处理流(包装流)是对结点流进行的功能扩展和延伸,用到了修饰器设计模式,下面介绍一下其实现原理和方法

在这里插入图片描述


首先先创建如下几个类

在这里插入图片描述

Reader_代表抽象父类方法

package.包装类设计理念;

public abstract class Reader_ {//只要实现了Reader_,在处理流中就可以被传入
    //抽象类中要实现的方法
    public void readFile(){}
    public void readString(){}
}

FileReader_、StringReader_代表处理流,处理文件和字符串

FileReader类:实现输出readFile功能

public class FileReader_ extends Reader_{
    //模拟节点流,父类方法在此进行实现
    public void readFile(){
        System.out.println("对文件内容进行读取");
    }
}

StringReader类:

public class StringReader extends Reader_{
    //模拟节点流,父类方法在此进行实现
    public void readString(){
        System.out.println("对字符串进行读取");
    }
}

BufferReader_代表处理流

public class BufferReader_ extends Reader_{//包装类中定义private变量Reader_ reader_,实现调用
    private Reader_ reader_;
    //包装类中实现传入相关结点流
    public BufferReader_(Reader_ reader_) {//传入的为Reader_或Reader_的子类都可
        this.reader_ = reader_;
    }
    //以上部分即可对不同的流都进行接受并处理

    //还可以对相应的方法进行封装扩展
    public void readFile(){//封装
        reader_.readFile();
    }
    //例如将readFile方法变为读取多个文件
    public void readFiles(int FileNum){//扩展
        for (int i = 0; i < FileNum; i++) {
            reader_.readFile();
        }
    }
}

创建Test类进行测试

public class Test {
    public static void main(String[] args) {
        BufferReader_ bufferReader_=new BufferReader_(new FileReader_());//在BufferReader_中传入了FileReader_这一子类

        bufferReader_.readFile();//调用BufferReader_中传入的readFile方法
        //输出结果为:	对文件内容进行读取
        
        bufferReader_.readFiles(5);
        //输出结果为:	对文件内容进行读取*5(次)
    }
}

综上处理流是对结点流进行的封装和重写调用,此方法为修饰器设计模式,可以在原有类的基础上创建一个新类,实现更加强大的功能。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值