以下のコードのデザインパターンの名前は何ですか?Javaのデザインパターンが認識されない
FileInputStream fin = new FileInputStream("X.zip");
BufferedInputStream bin = new BufferedInputStream(fin);
ZipInputStream zin = new ZipInputStream(bin);
誰でもお手伝いできますか?ありがとう。
以下のコードのデザインパターンの名前は何ですか?Javaのデザインパターンが認識されない
FileInputStream fin = new FileInputStream("X.zip");
BufferedInputStream bin = new BufferedInputStream(fin);
ZipInputStream zin = new ZipInputStream(bin);
誰でもお手伝いできますか?ありがとう。
デコレータパターンです。
新しいインスタンスを作成するたびに、既存のインスタンスに新しい動作が動的に追加されます。
ビヘイビアが実行時に追加され、クラス自体には追加されないため、動的です。あなたの例では
、あなたがバッファリング動作を追加し、圧縮機能を提供しZipInputStream
でBufferedInputStream
インスタンスを飾ることで終えるBufferedInputStream
を飾るの基本的な機能を備えたシンプルなFileInputStream
を作成します。
また、この方法でコードを書くことができます。
ZipInputStream zip = new ZipInputStream(new BufferedInputStream(new FileInputStream("X.zip")));
両方
BufferedInputStream
とZipInputStream
はInputStream
インスタンスの振る舞いを豊かにするために設計されてFilterInputStream
抽象クラスから派生します。
のJavadocはそれを説明する:
A FilterInputStreamは方法 または追加の機能を提供するに沿ってデータを変換し、 ようなデータの基本的なソースを使用して他のいくつかの入力ストリームを、含んでいます。 FilterInputStreamクラス 自体は、入力ストリームのすべてのメソッドを単純にオーバーライドし、含まれている入力ストリームにすべての要求を が渡したバージョンを使用します。 のサブクラスFilterInputStreamはこれらのメソッドのいくつかをさらにオーバーライドし、さらに はメソッドとフィールドを追加で提供します。