domingo, 10 de mayo de 2009
Decorator

Decorator amplía la funcionalidad al tiempo que mantiene la misma interfaz, contrariamente a un adaptador que modifica las interfaces sin agregar funcionalidad. Generalmente, un decorador no altera la funcionalidad existente, sólo añade más funciones, de modo que los objetos de la clase resultante se comporten exactamente como los originales, pero que también realicen algo adicional.

Características generales de este patrón:

Nombre:

Decorator.

También conocido como:

Wrapper.

Propósito:

Asignar nuevas responsabilidades a un objeto dinámicamente. Provee una alternativa a la creación de subclases por herencia.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· Para asignar responsabilidades a objetos individuales de forma dinámica y transparente, sin afectar a otros objetos.

· Para responsabilidades que pueden ser suprimidas.

· Cuando no es práctico utilizar herencia de clases (porque se produciría una explosión del número de clases, o porque no se tiene la definición de la clase).

Estructura:

Participantes:

· Component: Representa el componente que contiene el comportamiento genérico, puede ser una clase abstracta o una interfaz.

· Decorator: Define el comportamiento estándar que se espera de todos los Decoradores, Decorator puede ser una clase abstracta o una interfaz, proporciona el apoyo para la contención, es decir, tiene una referencia a un Componente, que puede ser un ConcreteComponent o un Decorator.

· ConcreteDecorator: Cada subclase Decorator debe apoyar a encadenar (referencia a un componente, además de la posibilidad de añadir y eliminar esa referencia), más allá de la base de exigencia, cada Decorator puede definir métodos adicionales y/o variables para ampliar el componente.

Consecuencias:

· Más flexibilidad que la herencia de clases (estática), las responsabilidades se añaden y eliminan dinámicamente, evita la explosión de clases y permite añadir una propiedad más de una vez.

· Se puede definir una clase sencilla y añadirle nuevas características mediante decoradores, pudiendo así obtener gran funcionalidad combinando piezas sencillas, sólo se incorpora lo que se usa.

· Muchos componentes pequeños: al usar decoradores, el sistema tiene muchos objetos pequeños, puede ser difícil de entender y depurar.

Patrones relacionados:

· Adapter.

· Composite.

· Strategy.

Etiquetas: , ,

 
posted by Camilo Mojica at 13:53 | Permalink |


0 Comments: