Patròn Composite
Intención
Permite construir objetos complejos mediante composición recursiva de objetos similares. El patrón Composite también permite que los objetos del árbol sean manipulados por un manejador consistente, para requerir todos los objetos hay una superclase o un interfaz común. Permite a los clientes tratar de la misma manera tanto a objetos individuales como a compuestos.
Aplicabilidad
- Tenemos un objeto complejo que queremos descomponer en una jerarquía de objetos.
- Queremos minimizar la complejidad del conjunto de la jerarquía minimizando el número de tipos diferentes de objetos hijo en el árbol que los objetos compuestos necesitan para formarse.
- Los clientes no conocen la diferencia entre los objetos individuales y los grupos.
Minimiza la complejidad de un objeto composite organizado en jerarquías parte-todo proporcionando una superclase para todos los objetos de la jerarquía y una superclase abstracta para todos los composite de la jerarquía.
Estructura

Component: El Component es una clase abstracta y la superclase común de todos los objetos que están en el árbol de objetos para formar un objeto composite. Los objetos
composite normalmente tratan a los objetos que ellos contienen como instancias del Component. Los clientes de los objetos composite los tratan normalmente como instancias del Component.
Leaf: Las instancias de estas clases son utilizadas como hojas en la organización del árbol. Una hoja no tiene hijos. Definen el comportamiento de los objetos primitivos.
Composite:
- Define el comportamiento de los objetos que tienen hijos.
- Almacena los hijos.
- Define y proporciona las implementaciones por defecto para los métodos para manejar los componentes de los objetos composite. El método add añade un componente a un objeto composite. El método remove borra un componente del objeto composite. El método getChild retorna una referencia a un objeto componente de un objeto composite.
- Cliente: Manipula los objetos en la composición a través de la interfaz de la clase Component.
- El principal beneficio del patrón Composite es que permite a los clientes de un objeto composite y a los objetos que lo constituyen desconocer la clase específica de los objetos con los que tratan.
- Se simplifica la adición de nuevos objetos.
- El diseño es más general.
- Se dificulta el control de los tipos de composiciones válidas. Deben hacerse chequeos en tiempo de ejecución.
Decorator: Generalmente se usan juntos.
Flyweight: Para compartir componentes, cuando no haya referencias a los padres.
Iterator: Para recorrer los hijos en un composite.
Chain of Responsibility: se puede combinar con el patrón Composite para añadir links del hijo al padre (para propagar responsabilidades hacia arriba), de tal forma que, los hijos puedan conseguir información sobre un progenitor sin tener que conocer que progenitor proporciona la información.
Vistor: Se puede utilizar para encapsular operaciones en una clase simple, que de lo contrario podría propagarse a través de muchas clases y agregar comportamiento a las clases del patrón Composite.
No hay comentarios:
Publicar un comentario