Portada Favoritos
Lista Articulos: [0-C] [C-I] [I-P] [P-Z] | Todas las categorías | Página aleatoria | Lo que enlaza aquí

Composite (patrón de diseño)

El patrón Composite sirve para construir objetos complejos a partir de otros más simples y similares entre sí, gracias a la composición recursiva y a una estructura en forma de árbol.

Esto simplifica el tratamiento de los objetos creados, ya que al poseer todos ellos una interfaz común, se tratan todos de la misma manera.


Tabla de contenidos

Problema que soluciona

Necesitamos crear una serie de clases para guardar información acerca de una serie de figuras que serán círculos, cuadrados y triángulos. Además necesitamos poder tratar también grupos de imágenes porque nuestro programa permite seleccionar varias de estas figuras a la vez para moverlas por la pantalla.

En principio tenemos las clases Circulo, Cuadrado y Triangulo, que heredarán de una clase padre que podríamos llamar Figura e implementarán todas la operación pintar(). En cuanto a los grupos de Figuras podríamos caer en la tentación de crear una clase particular separada de las anteriores llamada GrupoDeImagenes, también con un método pintar().

Problema.

Esta idea de separar en clases particulares componentes (figuras) y contenedores (grupos) tiene el problema de que, para cada uno de los dos tipos, el método pintar() tendrá una implementación diferente, aumentando la complejidad del sistema.


Implementación

El patrón Composite da una solución elegante a este problema, de la que además resulta en una implementación más sencilla.

A la clase Figura la llamaríamos Grafico y de ella extenderían tanto Circulo, Cuadrado y Triangulo, como GrupoDeImagenes. Además, ésta última tendría una relación todo-parte de multiplicidad * con Grafico: un GrupoDeImagenes contendría varios Graficos, ya fuesen éstos Cuadrados, Triangulos, u otros objetos GrupoDeImagenes


Diagrama

(Falta diagrama).


Ejemplos de utilización

En Java: las clases java.awt.Component (Componente), java.awt.Container (Contenedor), java.awt.Panel (Contenedor concreto), java.awt.Button (Hoja)



This site support the Wikimedia Foundation. This Article originally from Wikipedia. All text is available under the terms of the GNU Free Documentation License Page HistoryOriginal ArticleWikipedia