Existiert das Decorator-Pattern in den Java-IO-Klassen?

14

Für eine Zuordnung muss ich herausfinden, welche der Gang of Four Entwurfsmuster die Klassen java.io.Readerund ihre Unterklassen java.io.PushbackReader, java.io.BufferedReaderund java.io.FilterReadermit gebaut wurden.

Nach diesem Beitrag wäre das Entwurfsmuster das Dekorateurmuster. Dies macht nur Sinn für mich , wenn PushbackReader, BufferedReaderund FilterReaderkann eingerichtet werden , die gleichzeitig verwendet werden, wodurch effektiv ein BufferedPushbackFilterReader. Ist das die Idee?

Gemeinschaft
quelle
Schauen Sie sich die Konstruktoren dieser Klassen an. Können Sie damit zB die Buffered Natur über die FilterNatur stapeln ?
Kilian Foth
@Kilian Foth: Sieht so aus.

Antworten:

10

Ja, so kann man sie auch dekorieren. Betrachten Sie einfach das folgende

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

Das würde einen originellen Leser dazu schmücken

  • zuerst gepuffert werden
  • und dann Pushback / Ungelesene Funktionalität aktivieren (trotzdem wird das Ergebnis gepuffert ..)

FilterReaderund Readersind Basisklassen in der Hierarchie ...


quelle
Und BufferedReader, FilterReaderund PushbackReadersind Dekorateure von Reader, nicht wahr?
1
Ja das ist richtig.
Duffymo
1
Ja - BufferedReader machen die zugrunde liegende Leser gepuffert, PushbackReader ermöglicht es Ihnen, ‚ungelesen‘ Daten aus dem Leser etc ...
11

Das Dekorationsmuster gilt hier, weil es BufferedReaderein Reader- es ist immer noch ein Reader(es hat alle Methoden von Reader), aber es hat mehr "Schnickschnack" (mehr Methoden).

Das folgende Beispiel zeigt, wie eine Klasse die Funktionalität der Klasse "dekoriert", die sie umschließt, und Sie können sie verketten, um die Dekoration fortzusetzen:

        new BufferedReader(new FileReader(new File("some.file")));
Bohemien
quelle