Composite - Tensho97/Aprende-a-Aprender GitHub Wiki

Patrón Composite


Intención, Ventajas e Inconvenientes

Intención: Componer objetos en jerarquías //todo-parte// y permitir a los clientes tratar objetos simples y compuestos de manera uniforme.

Ventajas:

  • Permite tratamiento uniforme de objetos simples y complejos así como composiciones recursivas.
  • Simplifica el código de los clientes, que solo usan una interfaz
  • Facilita añadir nuevos componentes sin afectar a los clientes.

Inconvenientes:

  • Difícil restringir los tipos de los hijos.
  • Las operaciones de gestión de hijos en los objetos simples pueden presentar problemas: seguridad frente a flexibilidad.

El problema: Escalabilidad

Supongamos que tenemos un Documento, este esta formado por varias paginas, las cuales están formadas por columnas, que a su vez contienen lineas de texto formadas por caracteres.

Las columnas y paginas pueden contener marcos y los marcos pueden contener columnas.

Las columnas, **marcos **y lineas de texto pueden contener imágenes.

La relación resultante de esta sentencia es un diagrama complejo con múltiples relaciones por cada elemento, lo que dificulta su comprensión e implementación.

Solución

Para solucionar esto usaremos el que consisten en ir creando una jerarquía de elemento que permita tratar a todos lo elementos simples o compuestos de igual modo. La sentencia anterior no cambiaría, comprensión e implementación se vuelven más sencillas.

La idea de este patrón se ve reflejado en el siguiente diagrama:

Diagrma Composite

Este diagrama a lo grande resultaría en un esquema como el siguiente:esquema composite

IGNORAR LOS DATOS DEL ULTIMO ÁRBOL SIMPLEMENTE FIJARSE EN LOS COMPONENTES SIMPLES Y COMPUESTOS REPRESENTADOS POR COLORES

Ejemplo practico

Un ejemplo practico de este patrón es la jerarquía de clases de AWT que se ha diseñado siguiendo el patrón COMPOSITE.

Ejemplo Composite

Como se puede observar las posibilidades son infinitas:

Podrías crear una ventana formada por 2 cajas de texto, 2 campos de texto, 3 botones, 1 panel que contenga 5 casillas de validación y una lista desplegable

O podría crear una ventana formada por 2 etiquetas , 2 campos de texto y un botón.

Por otro lado, añadir nuevos tipos de contenedores y de componentes no seria muy costoso (por lo que estaríamos ante una solución extensible).



Autor : Miguel