¿Existe el patrón decorador en las clases Java IO?

14

Para una asignación, tengo que averiguar cuál de patrón de diseño Banda de los Cuatro de las clases java.io.Readery sus subclases java.io.PushbackReader, java.io.BufferedReadery java.io.FilterReaderfueron construidas con.

Según esta publicación, el patrón de diseño sería el Patrón Decorador. Esto solo tiene sentido para mí si PushbackReader, BufferedReadery FilterReaderpuede ser decorado para ser usado al mismo tiempo, creando efectivamente a BufferedPushbackFilterReader. ¿Esa es la idea?

Comunidad
fuente
Mira los constructores de esas clases. ¿Te permiten apilar, por ejemplo, la Buffered naturaleza sobre la Filternaturaleza?
Kilian Foth
@Kilian Foth: Parece que sí.

Respuestas:

10

Sí, puedes decorarlos así. Solo considera lo siguiente

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

Eso decoraría un lector original para

  • primero se amortigua
  • y luego habilite la funcionalidad de retroceso / no leído (aún el resultado se almacena en memoria intermedia ..)

FilterReadery Readerson clases base en la jerarquía ...


fuente
Y BufferedReader, FilterReadery PushbackReaderson decoradores de Reader, ¿verdad?
1
Si eso es correcto.
duffymo
1
Sí - BufferedReader hacer que el lector subyacente tamponada, PushbackReader le permite a los datos leídos '' desde el lector etc ...
11

El patrón decorador se aplica aquí porqueBufferedReader envuelve un Reader- sigue siendo un Reader(tiene todos los métodos de Reader), pero tiene más "campanas y silbatos" (más métodos).

Aquí hay un ejemplo que muestra cómo una clase "decora" la funcionalidad de la que envuelve, y puede encadenarlas para seguir decorando:

        new BufferedReader(new FileReader(new File("some.file")));
bohemio
fuente