我有一个问题,即下面代码的设计模式的名称是什么。
FileInputStream fin = new FileInputStream("X.zip");
BufferedInputStream bin = new BufferedInputStream(fin);
ZipInputStream zin = new ZipInputStream(bin);
谁能帮助我吗?谢谢。
答案 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可能会进一步覆盖其中一些方法 还提供其他方法和领域。