O Padrão Decorador existe nas classes Java IO?


14

Para uma atribuição, eu tenho que descobrir qual o padrão de design Gang of Four as classes java.io.Readere suas subclasses java.io.PushbackReader, java.io.BufferedReadere java.io.FilterReaderforam construídos com.

De acordo com este post, o padrão de design seria o Padrão Decorador. Isso só faz sentido para mim se PushbackReader, BufferedReadere FilterReaderpode ser decorado para ser usado ao mesmo tempo, criando efetivamente a BufferedPushbackFilterReader. Essa é a ideia?


Veja os construtores dessas classes. Eles permitem que você empilhe, por exemplo, a Buffered natureza em cima da Filternatureza?
precisa

@Kilian Foth: Parece que sim.

Respostas:


10

Sim, você pode realmente decorá-los assim. Basta considerar o seguinte

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

Isso decoraria um leitor original para

  • primeiro seja armazenado em buffer
  • e, em seguida, ative a funcionalidade pushback / não lida (ainda o resultado é armazenado em buffer ..)

FilterReadere Readersão classes base na hierarquia ...


E BufferedReader, FilterReadere PushbackReadersão decoradores de Reader, certo?

1
Sim esta correto.
21411 duffymo

1
Sim - BufferedReader fazer o leitor subjacente tamponada, PushbackReader permite-lhe dados 'não lido' do leitor etc ...

11

O padrão decorador se aplica aqui porque BufferedReaderenvolve a Reader- ainda é uma Reader(possui todos os métodos deReader ), mas possui mais "sinos e assobios" (mais métodos).

Aqui está um exemplo que mostra como uma classe "decora" a funcionalidade da classe que ela envolve, e você pode encadeá-las para continuar decorando:

        new BufferedReader(new FileReader(new File("some.file")));
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.