Discuss / Java / FilterInputStream通俗点讲到底有什么用?

FilterInputStream通俗点讲到底有什么用?

Topic source

The__Wolf

#1 Created at ... [Delete] [Delete and Lock User]

如果没有FilterInputStream,比如说要给FileInputStream加功能,就是用子类继承然后实现。

有了FilterInputStream以后,就是用子类继承FilterInputStream实现,但这样依然会有很多子类啊,只相当于多了一个代理。

这样的话子类相对来说会少一些

August_xkz

#3 Created at ... [Delete] [Delete and Lock User]

没有 FilterInputStream 的话,所有功能性子类相当于是所有功能组合而成的笛卡尔集。

有了 FilterInputStream 的话,功能性子类的数量随功能线性增长。

gaby_stanford

#4 Created at ... [Delete] [Delete and Lock User]

FilterInputStream可以作用于任何一个提供数据的基础的类

比如:提供数据的基础的类5个,2个功能类

没有FilterInputStream      每个基础类都要派生2个功能子类

那么新增类  5*2,且增加一个功能子类就是 5*(2+1)

有了FilterInputStream  

那么一共有的类是5+Filter+2,且增加一个功能子类就是 5+Filter+(2+1)

为什么 不一个子类 实现所有功能 搞那么多子类??

楼上在说啥 有点迷糊 

我的理解就是 少了 多个功能的子类而已

之前:

如果要给FileInputStream添加缓冲和签名的功能,那么我们还需要派生BufferedDigestFileInputStream。如果要给FileInputStream添加缓冲和加解密的功能,则需要派生BufferedCipherFileInputStream

现在:

BufferedDigestFileInputStream 和 BufferedCipherFileInputStream 都不需要了

🌙

#7 Created at ... [Delete] [Delete and Lock User]

CountInputStream

如果不采用 装饰器模式

CountInputStream 必须 继承  ByteArrayInputStream

显然 CountInputStream 没有

NB

#8 Created at ... [Delete] [Delete and Lock User]

个人理解:FilterInputStream 将所有的数据源输入流统一起来,需要添加某个功能时,直接定义一个子类继承 FilterInputStream (如果还需要继续叠加功能,继续继承子类),

需要使用某功能或组合的功能时,实例化对应的功能子类,传入特定数据源输入流即可(比如文件、网络、内存模拟数据源等)。(诚惶诚恐@_@)

简单的问题想得,太复杂了。

就是 1 、 2 、 3 

可以 实现 1*2*3 = 6 的功能 

一下子省了3个实现类


  • 1

Reply