Composite

Il design pattern Composite permette di trattare un gruppo di oggetti come se fossero l'istanza di un oggetto singolo organizzando gli oggetti in una struttura ad albero, nella quale i nodi sono delle composite e le foglie sono oggetti semplici.

È utilizzato per dare la possibilità ai clients di manipolare oggetti singoli e composizioni in modo uniforme ignorando la differenza tra oggetti composti ed oggetti singoli.

Se durante lo sviluppo i programmatori scoprono che stanno usando più oggetti nello stesso modo, e spesso il codice per gestirli è molto simile, il Composite rappresenta una buona scelta di rifattorizzazione: è meno complesso, in questa situazione, trattare oggetti primitivi e composti in modo omogeneo.

Attraverso l'interfaccia Component, il Client interagisce con gli oggetti della composite. Se l'oggetto desiderato è una Leaf, la richiesta è processata direttamente; altrimenti, se è una Composite, viene rimandata ai figli cercando di svolgere le operazioni prima e dopo del rimando.

In questo modo, si semplifica il Client, si creano delle gerarchie di classi, si semplifica l'aggiunta di nuovi componenti, anche se il design diventa troppo generale.

Struttura del pattern Composite

Fonte Wikipedia