Patrón Composite

Problema a resolver

Problema

Cómo tratar un conjunto de objetos heterogéneos, que pueden formar jerarquías de profundidad arbitraria, como objetos homogéneos indistingibles, tanto desde fuera de la jerarquía, es decir a nivel de cliente de la jerarquía, como internamente dentro de la jerarquía.

Solución

Ejemplo Concreto

Solución Abstracta

Ventajas e Incovenientes

Receta para aplicar el patrón

  1. Identificar que elementos de la jerarquía son hojas y cuáles nodos intermedios.
  2. Crear una clase abstracta CA que represente tanto a los nodos intermedios como a las hojas.
  3. Añadir a la clase abstracta CA las operaciones que queramos homogeneizar dentro de la jerarquía.
  4. Crear una clase X por cada tipo de hoja que pueda aparecer en la jerarquía de elementos y hacer que dicha clase herede de la clase abstracta CA.
  5. Implementar los métodos de la clase abstracta CA en las clases X como corresponda a cada hoja.
  6. Crear una clase Y por cada tipo de nodo intermedio que pueda aparecer en la jerarquía de elementos y hacer que dicha clase herede Y de la clase abstracta CA.
  7. Añadir una asociación/composición desde las clases Y a la clase abstracta CA.
  8. Implementar los métodos de la clase abstracta CA en las clases Y, correspondientes a los nodos intermedios, mediante delegación en los elementos contenidos en cada nodo intermedio. Estos elementos contenidos deben tratarse de manera homogénea.

Detalles a considerar

  1. ¿Cuántos métodos subo de las clases concretas a las clases abstractas?
  2. La referencia entre los grupos y los hijos, ¿asociación o composición?
  3. La referencia entre los grupos y los hijos, ¿unidireccional o bidireccional?