デコレータパターンはJava IOクラスに存在しますか?


14

割り当てのために、私は4デザインパターンのギャングのどのクラスを見つけるために持っているjava.io.Readerとそのサブクラスをjava.io.PushbackReaderjava.io.BufferedReaderjava.io.FilterReaderして建設されました。

この投稿によると、デザインパターンはデコレータパターンになります。これは場合にのみ、私には理にかなってPushbackReaderBufferedReaderそしてFilterReader効果的に作成し、同時に使用されるように装飾することができますBufferedPushbackFilterReader。それはアイデアですか?


これらのクラスのコンストラクターを見てください。Buffered 自然の上に自然を積み重ねることができますFilterか?
キリアンフォス

@キリアン・フォス:こんな感じ。

回答:


10

はい、あなたは確かにそのようにそれらを飾ることができます。以下を考慮してください

PushbackReader pushbackBufferedReader = new PushbackReader(
     new BufferedReader(original));

それは元の読者を飾るだろう

  • 最初にバッファリングされる
  • プッシュバック/未読機能を有効にします(結果はまだバッファリングされています。)

FilterReaderそしてReader、階層内の基底クラスです...


そしてBufferedReaderFilterReaderPushbackReaderのデコレータありReader、右は?

1
それは正解です。
-duffymo

1
はい-BufferedReaderは、基になるリーダーをバッファーに入れます。PushbackReaderを使用すると、リーダーなどからデータを「未読」にできます。

11

ここにデコレータパターンが適用されるのはBufferedReader、aをラップするためですReader-まだaですがReader(のすべてのメソッドがありますReader)、より多くの「ベルとホイッスル」(メソッドが多い)があります。

1つのクラスがラップするクラスの機能をどのように「装飾」するかを示す例を次に示します。装飾を続けるためにそれらを連鎖させることができます。

        new BufferedReader(new FileReader(new File("some.file")));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.