Il modello Decorator esiste nelle classi IO di Java?


14

Per un incarico, devo scoprire quale la Banda dei Quattro modello di progettazione le classi java.io.Readere le sue sottoclassi java.io.PushbackReader, java.io.BufferedReadere java.io.FilterReadersono state costruite con.

Secondo questo post, il modello di progettazione sarebbe il modello Decoratore. Questo ha senso per me solo se PushbackReader, BufferedReadere FilterReaderpuò essere decorato per essere usato allo stesso tempo, creando effettivamente un BufferedPushbackFilterReader. È questa l'idea?


Guarda i costruttori di quelle classi. Ti permettono di impilare, ad esempio la Buffered natura in cima alla Filternatura?
Kilian Foth,

@Kilian Foth: sembra così.

Risposte:


10

Sì, puoi davvero decorarli così. Considera solo quanto segue

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

Ciò decorerebbe un lettore originale

  • prima essere bufferizzato
  • e quindi abilitare la funzionalità pushback / non letta (il risultato è ancora bufferizzato ..)

FilterReadere Readersono classi di base nella gerarchia ...


E BufferedReader, FilterReadere PushbackReadersono i decoratori di Reader, giusto?

1
Sì, è corretto.
Duffymo,

1
Sì - BufferedReader rende bufferizzato il lettore sottostante, PushbackReader consente di "leggere i dati" dal lettore ecc ...

11

Il motivo del decoratore si applica qui perché BufferedReaderavvolge a Reader- è ancora un Reader(ha tutti i metodi di Reader), ma ha più "campane e fischietti" (più metodi).

Ecco un esempio che mostra come una classe "decora" la funzionalità di quella che avvolge, e puoi incatenarla per continuare a decorare:

        new BufferedReader(new FileReader(new File("some.file")));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.