Patrón "decorador"


Descripción

Imaginemos que tenemos un editor de texto básico y queremos añadirle nuevas funcionalidades, como un scroll o un borde. Una solución podría ser crear subclases para un editor con scroll, sin scroll, con scroll y con borde, etc. Evidentemente esta no es una buena solución, ya que acabamos con una jungla de clases y subclases.

Con este patrón tratamos de evitar este efecto de herencia-jungla, ya que asignamos dinámicamente nuevas responsabilidades a un objeto. Es una alternativa más flexible a crear subclases para extender la funcionalidad de una clase. De esta forma añadimos atributos o comportamiento adicional a un objeto concreto, no a una clase.

Un ejemplo de implementación con Java

El componente gráfico es un modesto editor de texto:



	JEditorPane panel_text = new JEditorPane();

Es muy sencillo añadir la funcionalidad del scroll sin usar herencia:



	JScrollPane scroll_text = new JScrollPane( panel_text ); // Asignamos scroll al panel de texto

El último paso es añadir el decorador (y por añadidura el editor) al contenedor raíz del applet:



	cont_global.add( scroll_text );

El componente no conoce a su decorador (en este caso el scroll). Es el decorador el que referencia a su componente. Esta es la razón de que al añadir (add) al contenedor raíz debamos usar el decorador (scroll) y no el componente (editor).

Componentes y decoradores deben heredar de una clase común. En nuestro ejemplo JEditorPane y JScrollPane heredan de JComponent.

Para ir a un tutorial sobre el patrón Decorador en tecnologías .NET pulse aquí.



Volver al índice