2017-05-23 17 views
2

以下のコードのデザインパターンの名前は何ですか?Javaのデザインパターンが認識されない

FileInputStream fin = new FileInputStream("X.zip"); 
BufferedInputStream bin = new BufferedInputStream(fin); 
ZipInputStream zin = new ZipInputStream(bin); 

誰でもお手伝いできますか?ありがとう。

答えて

6

デコレータパターンです。

新しいインスタンスを作成するたびに、既存のインスタンスに新しい動作が動的に追加されます。
ビヘイビアが実行時に追加され、クラス自体には追加されないため、動的です。あなたの例では

、あなたがバッファリング動作を追加し、圧縮機能を提供しZipInputStreamBufferedInputStreamインスタンスを飾ることで終えるBufferedInputStreamを飾るの基本的な機能を備えたシンプルなFileInputStreamを作成します。

また、この方法でコードを書くことができます。

ZipInputStream zip = new ZipInputStream(new BufferedInputStream(new FileInputStream("X.zip"))); 
両方 BufferedInputStream

ZipInputStreamInputStreamインスタンスの振る舞いを豊かにするために設計されてFilterInputStream抽象クラスから派生します。
のJavadocはそれを説明する:

A FilterInputStreamは方法 または追加の機能を提供するに沿ってデータを変換し、 ようなデータの基本的なソースを使用して他のいくつかの入力ストリームを、含んでいます。 FilterInputStreamクラス 自体は、入力ストリームのすべてのメソッドを単純にオーバーライドし、含まれている入力ストリームにすべての要求を が渡したバージョンを使用します。 のサブクラスFilterInputStreamはこれらのメソッドのいくつかをさらにオーバーライドし、さらに はメソッドとフィールドを追加で提供します。

関連する問題