Czy wzorzec dekoratora istnieje w klasach Java IO?

14

Dla zadania, muszę dowiedzieć się, który z Gang of Four wzorca projektowego klasy java.io.Readeri jej podklasy java.io.PushbackReader, java.io.BufferedReaderi java.io.FilterReaderzostały zbudowane z.

Zgodnie z tym postem wzorem projektu byłby wzór dekoratora. To ma sens tylko do mnie, czy PushbackReader, BufferedReaderi FilterReadermogą być ozdobione być używane w tym samym czasie, tworząc skutecznie BufferedPushbackFilterReader. Czy to jest pomysł?

Społeczność
źródło
Spójrz na konstruktorów tych klas. Czy pozwalają ci układać się w stosy, np. Buffered Przyroda nad Filternaturą?
Kilian Foth,
@Kilian Foth: Wygląda na to.

Odpowiedzi:

10

Tak, naprawdę możesz je tak ozdobić. Zastanów się, co następuje

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

To ozdobiłoby oryginalnego czytelnika

  • najpierw zbuforowane
  • a następnie włączyć funkcję pushback / nieprzeczytane (nadal wynik jest buforowany ..)

FilterReaderi Readersą klasami podstawowymi w hierarchii ...


źródło
A BufferedReader, FilterReaderi PushbackReadersą wśród dekoratorów Reader, prawda?
1
Tak, to jest poprawne.
duffymo,
1
Tak - BufferedReader powoduje buforowanie bazowego czytnika, PushbackReader umożliwia „nieprzeczytane” dane z czytnika itp.
11

Wzór dekorator stosuje się tutaj, ponieważ BufferedReaderokłady Reader- to wciąż Reader(ma wszystkie metody Reader), ale ma więcej „wodotryski” (więcej metod).

Oto przykład pokazujący, w jaki sposób jedna klasa „ozdabia” funkcjonalność tej, którą otacza, i możesz połączyć je w łańcuch, aby nadal dekorować:

        new BufferedReader(new FileReader(new File("some.file")));
Czech
źródło