Java IO(九)FilterInputStream 和 FilterOutputStream

Java IO(九)FilterInputStream 和 FilterOutputStream

一、介绍

FilterInputStream 和 FilterOutputStream 是过滤字节输入流和过滤字节输出流。它们的作用是封装其他的基础流,并为它们提供额外的功能。它们的子类分别有:

  • 缓冲流:BufferedInputStream 和 BufferedOutputStream
  • 数据流:DataInputStream 和 DataOutputStream
  • 回退流:PushBackInputStream 和 PushBackOutputStream

二、装饰者模式和继承

装饰者模式,就是将原有的基础流进行"装饰",那么装饰后的方法要与原先被装饰的基础类要保持一致,也可以在对基础流进行扩展。而继承是继承父类的属性和方法,通过重写父类里面的方法也可以起到"装饰"作用,比如强化或者优化父类里面的一些方法。

两者的区别是装饰者模式可以动态地扩展一个对象,给对象添加额外的功能,而且装饰者和被装饰者之间不会产生耦合。

(一)、实现 BufferedInputStream 的功能,采用继承的方式。

如果采用继承的方式,要实现 BufferedInputStream 的功能,我们就必须继承大部分的字节输入流,Java IO中还有其他的如 DataInputStream 等,如果都使用继承方式,那么Java IO 体系会变得很臃肿,而且类与类之间的耦合度特别高。

(二)、实现 BufferedInputStream 的功能,采用装饰者模式。

通过上面的继承方式,通过装饰者模式可以解决继承带来的问题。

装饰者模式相比继承,没有这么多繁杂的类,而且类与类的之间的耦合性降低,具体做法就是将类 FilterInputStream 提取为一个父类,而其子类就是各个功能的实现类。如果想要基础输入流要某个功能,那么就可以将对应的基础输入流传到对应的子类构造方法中。

posted @ 2020-05-21 23:15  凌倾-学无止境  阅读(565)  评论(0编辑  收藏  举报