Composite

De Viquipèdia
Dreceres ràpides: navegació, cerca

El patró Composite és un patró compost que descriu un grup d'objectes, que s'ha de fer servir amb una sola instancia 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 | modifica el codi]

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 es 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 | modifica el codi]

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 per el Component.

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

- Client: Manipula els objectes utilitzant la interficie Component.

On aplicar-lo[modifica | modifica el codi]

  • 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 diferencia entre els objectes individuals i els grups

Avantatges[modifica | modifica el codi]

  • 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 als clients

Desavantatges[modifica | modifica el codi]

  • É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ó

Referències[modifica | modifica el codi]