Composite

El patró Composite és un patró compost que descriu un grup d'objectes, que s'ha de fer servir amb una sola instància d'objecte. La intenció d'un Composite és “compondre” objectes en estructures d'arbre. Implementar el patró Composite permet als clients tractar de manera uniforme els objectes individuals i els objectes compostos.

Motivació

[modifica]

Hi ha moments en els que un programa necessita manipular una estructura de dades d'arbre. Penseu, per exemple, un programa per a gestionar un sistema d'arxius. Un sistema de fitxers és una estructura d'arbre que conté branques que són les carpetes, així com els nodes fulla que són els arxius. Tingueu en compte que un objecte de carpeta en general conté un o més objectes arxiu o carpeta i per tant és un objecte complex, per tant un objecte arxiu és un objecte simple. També heu de tenir en compte que els arxius I carpetes tenen moltes operaions i atributs en comú, com per exemple moure i copiar un arxiu o carpeta, el nom de fitxer, la mida, per tant és convenient tractar els arxius i carpetes de manera uniforme mitjançant la definició d'un arxiu d'interficie.

Implementació

[modifica]

En aquesta figura es mostra un diagrama de classes del patró composite

Diagrama del patró Composite.

- Component: És la classe abstracta de Leaf i Composite. Defineix la interfície que ha de ser implementada per Leaf i Composite

- Leaf: Són els objectes que no tenen fills. Implementen serveis descrits pel Component.

- Composite: Podra contenir més fills. És la superclasse que defineix els mètodes també permet la implementacio de nous.

- Client: Manipula els objectes utilitzant la interficie Component.

On aplicar-lo

[modifica]
  • El component defineix una interfície comú, però el composite algunes vegades fa una implementació també comú
  • Quan es té un objecte complex i es vol dividir en una jerarquia d'objectes
  • Quan es requereix minimitzar la complexitat d'una jerarquia
  • Els Clients no coneixen la diferència entre els objectes individuals i els grups

Avantatges

[modifica]
  • Permet manipular objectes simples i compostos de manera uniforme
  • Simplifica el codi dels clients, que únicament utilitzaran una interfície
  • Facilita alhora d'afegir nous components sense afectar els clients

Desavantatges

[modifica]
  • És difícil restringir els tipus dels fills
  • Les operacions de gestió dels fills en els objectes simples poden presentar problemes
  • S'han de fer comprovacions en temps d'execució

Enllaços externs

[modifica]
  • Composite pattern (anglès)
  • Exemple en java (anglès)