
BufferedInputStream
と
ZipInputStream
はどちらも
FilterInputStream
を拡張し、
FilterInputStream
は
InputStream
を拡張しています。
InputStream
は抽象デコレータク
ラスの役割を果たします。
FileInput
Stream
ByteArrayInput
Stream
FilterInput
Stream
StringBufferIn
putStream
InputStream
InflatorInputStreamDataInputStreamBufferedInputStreamPushbackInputStream
これは抽象コンポーネントです。
FilterInputStream
は抽象デコレータです。
最後に、これらはすべて具象デコレータです。
スターバズの設計とあまり違いはありません。これで
java.io API
のマニュ
アルを読めば、さまざまな入力ストリームに対してデコレータを作成できる
はずです。
また、出力ストリームもスターバズの設計とほとんど変わりません。文字
ベースのデータ用の
Reader
や
Writer
ストリームが、ストリームクラスの設計
と非常によく似ていることにもすでに気付いているでしょう(多少の違いや
矛盾はありますが、仕組みを理解する上では問題にならないほど似ています)。
しかし、
Java I/O
は
Decorator
パターンの欠点の
1
つも指摘しています。こ
のパターンを使った設計では小さなクラスが大量に作成されてしまうことが ...