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.
Ventajas e Incovenientes¶
Receta para aplicar el patrón¶
- Identificar que elementos de la jerarquía son hojas y cuáles nodos intermedios.
- Crear una clase abstracta
CAque represente tanto a los nodos intermedios como a las hojas.- Añadir a la clase abstracta
CAlas operaciones que queramos homogeneizar dentro de la jerarquía.- Crear una clase
Xpor cada tipo de hoja que pueda aparecer en la jerarquía de elementos y hacer que dicha clase herede de la clase abstractaCA.- Implementar los métodos de la clase abstracta
CAen las clasesXcomo corresponda a cada hoja.- Crear una clase
Ypor cada tipo de nodo intermedio que pueda aparecer en la jerarquía de elementos y hacer que dicha clase heredeYde la clase abstractaCA.- Añadir una asociación/composición desde las clases
Ya la clase abstractaCA.- Implementar los métodos de la clase abstracta
CAen las clasesY, 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¶
- ¿Cuántos métodos subo de las clases concretas a las clases abstractas?
- La referencia entre los grupos y los hijos, ¿asociación o composición?
- La referencia entre los grupos y los hijos, ¿unidireccional o bidireccional?