装饰者模式--经典的io流

装饰者模式--在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式

优点:继承的有力补充,遵守开闭原则
缺点:增加很多子类,过度使用会增加程序复杂性

抽象构件角色(component) 抽象类或者接口,定义一系列方法,由子类去实现
具体构件角色 (concrete component) component的子类,实现它的方法
装饰角色(decorator)component的子类,持用component的引用,它的主要作用是客户端的调用委派到被装饰类
具体装饰角色(concrete decorator)decorator子类,也是component的子类

image.png

IO流是比较经典的装饰者模式

image.png

抽象构件角色 InputStream 定义read、available等方法
具体构件角色 FileInputStream(文件的读取)PipedInputStream ByteArrayInputStream
ObjectInputStream(反序列化) StringBufferInputStream
装饰角色 FilterInputStream 比较特殊的子类,里面有InputStream,什么也不做,就转换调用一下inputStream引用的方法
具体装饰角色 DataInputStream(对更多数据类型进行输入) BufferedInputStream(缓存) PushbackInputStream

InputStream抽象类


image.png

FileInputStream类


image.png

FilterInputStream类


image.png

BufferedInputStream类


image.png

getInIfOpen方法中取到ipnutstream引用

实例化一个具有缓存功能的字节流对象时,只需要在 FileInputStream 对象上再套一层 BufferedInputStream 对象即可。

FileInputStream fileInputStream = new FileInputStream(filePath);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

你可能感兴趣的:(装饰者模式--经典的io流)