java中的设计模式无法识别

时间:2017-05-23 20:29:43

标签: java design-patterns inputstream

我有一个问题,即下面代码的设计模式的名称是什么。

FileInputStream fin = new FileInputStream("X.zip");  
BufferedInputStream bin = new BufferedInputStream(fin);
ZipInputStream zin = new ZipInputStream(bin);
谁能帮助我吗?谢谢。

1 个答案:

答案 0 :(得分:6)

这是一个装饰模式。

创建的每个新实例都以动态方式向现有实例添加新行为 它是动态的,因为行为是在运行时添加的,而不是在类本身中添加的。

在您的示例中,您创建了一个简单的FileInputStream,其中包含您使用BufferedInputStream进行装饰的基本功能,这些功能可以添加缓冲行为,并通过使用{{装饰BufferedInputStream实例来完成1}}提供压缩功能。

您也可以这样编写代码:

ZipInputStream

ZipInputStream zip = new ZipInputStream(new BufferedInputStream(new FileInputStream("X.zip"))); BufferedInputStream都来自ZipInputStream抽象类,旨在丰富FilterInputStream个实例的行为。
javadoc解释了它:

  

FilterInputStream包含一些其他输入流,它用作   它的基本数据来源,可能会沿途改变数据   或提供其他功能。 FilterInputStream类   本身只是简单地覆盖了InputStream的所有方法   将所有请求传递给包含的输入流。的子类   FilterInputStream可能会进一步覆盖其中一些方法   还提供其他方法和领域。