集合类图

线程

IO

字节输入流

InputStream

FilterInputStream剖析

这个类的特殊之处,就是包含了一个InputStream,使得可以在这个InputStream基础上进行多种封装,从而达到装饰的目的。

装饰者模式,顾名思义,是对原有类进行了一定的装饰,装饰后的类必须和原有的类拥有相同的方法,当然,可以在原有类的基础上进行扩展。

这里的装饰者模式通过包含一个原有的Inputstream对象,并且将InputStream原有的方法或直接暴露,或进行装饰后暴露,又或者添加了新的特性,如DataInputStream中的readInt(),BufferedInputStream中的缓存功能。

为什么InputStream选择装饰者模式,而非直接继承的方法来扩展,这就是装饰者模式VS继承。如果单纯的使用继承,就会造成类的“爆炸”式增长。

直接使用继承,可以实现“目的”和“方法”,但是每一种来源的输入流,都需要改善流读取方法,因此在使用继承时,每一个InputStream的子类都需要DataInputStream,BufferedInputStream这几个类提供的“装饰作用”的功能,因此需要的类的数目就是A*B的数目。

而直接使用装饰者模式,将InputStream的几个直接子类进一步抽象,在此基础上提供装饰作用,所需要的类的数目是A+B。使用装饰者模式使得java类的更有层次性,类的数目得到充分控制。这就是装饰者模式相比于继承的优势。

字节输出流

字符输入流

字符输入流

参考

https://blog.csdn.net/zhao123h/java/article/details/52826682

https://blog.csdn.net/zhoupenglei/article/details/46312405