lunes, 8 de julio de 2013

8.1.3 Decorador (Decorator)

El patrón Decorador permite añadir nueva funcionalidad a una familia de componentes manteniendo la interfaz del componente. El siguiente diagrama ilustra este patrón. La clase Componente es abstracta, la clase ComponenteConcreto implementa un comportamiento determinado. La clase Decorador contiene un Componente en su interior. Cuando se solicita una operación al objeto de la clase Decorador esta la deriva al Componente que contiene.

Las clases derivadas de Decorador son los verdaderos Decoradores que implementan una nueva funcionalidad añadida al Componente que contienen.

El decorador A añade cierta funcionalidad a cualquier componente manteniendo la interfaz de tal componente.

Por ejemplo, el patrón Decorador se puede utilizar, para añadir cifrado o compresión a las clases de escritura en Streams. Así, la clase de la que derivan todas sería Writer. Un Writer concreto, por ejemplo, es el FileWriter. La clase WriterDecorator se encarga de redirigir las llamadas a los diferentes métodos del Writer hacia el Writer que contiene dentro. Finalmente, las clases EncriptWriter y ZipWriter implementan cierta operación sobre el flujo de salida que se dirige hacia el Writer concreto contenido en el Decorador.




Decorador para añadir un buffer y compresión a un Writer.

El siguiente Diagrama de Actividad muestra el comportamiento esperado para este patrón.




La escritura pasa primero por el decorador (el ZipWriter), el cual decide cuándo enviarla al elemento decorado (el FileWriter en este caso).

No hay comentarios.:

Publicar un comentario