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ł?


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 ...


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")));
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.