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