Versioni
| Conosciuto anche comeNo ha altri nomi. IntentoIl design pattern Composite compone degli oggetti in una struttura ad albero facendo in modo che l'utilizzatore (Client) possa usare indifferentemente gli oggetti singoli (Leaf) e quelli composti (Composite). La struttura ad albero (con nodi Component) viene creata a run-time quindi questo design pattern è classificato rispetto allo scopo (vedi ClassificazioneDeiDesignPattern#ClassiOggetti) come rivolto agli oggetti. Rispetto al fine questo design pattern è classificato tra i ClassificazioneDeiDesignPattern#Strutturali. Diagramma UML
Un'altro diagramma equivalente qui . MotivazioneQuando c'è la necessità di rappresentare una gerarchia di oggetti parti-tutto dove un oggetto che rappresenta il tutto (Container) contiene diverse parti (Leaf o a sua volta un altro Container) può essere usato il design pattern Composite. Quando c'è una gerarchia di oggetti ed il codice della applicazione è complesso perché deve distinguere gli oggetti foglia (Leaf) da quelli contenitore (Container) e trattarli in maniera distinta il design pattern Composite permette all'utilizzatore (Client) di ignorare le differenze e quindi di usare tutti gli oggetti in maniera uniforme semplificando l'applicazione. Il punto centrale del design pattern Composite è che astrae i nodi foglia (Leaf) e quelli composti (Composite) in una classe base comune (Component). Esempi d'uso in .NETUn esempio d'uso in .NET è la classe System.Web.UI.Control che corrisponde a Component che ha la collezione Controls da cui sono disponibili le operazioni di Add, Remove e GetChild mentre i metodi RenderControl o DataBind corrispondono al metodo Operation. Lo stesso vale per System.Windows.Forms.Control . Un altro esempio è System.ComponentModel.Component che corrisponde a Component con la property Container di tipo IContainer da cui si ha accesso alla collezione Components con Add e Remove e l'accesso ai nodi figli menter in Component il metodo Dispose e la property Site hanno il ruolo di Operation. Note sulla implementazione in .NET.NET ha un sistema automatico di Garbage Collection, questo risolve il problema di rilascio degli oggetti con risorse managed e quindi nell'implementazione di questo design pattern non è necessario individuare chi è responsabile del rilascio di un nodo figlio. In caso di risorse unmanaged che richiedono di seguire il pattern del dispose va determinato il responsabile del rilascio di ogni oggetto. Per la rappresentazione della collezione dei nodi figli, possono essere scelte una qualunque delle collezioni di tipo IList. Del codice .NET di esempio è disponibile qui . Relazione con altri design pattern
Vedi la mappa della RelazioneTraDesignPattern. Approfondimenti
Domande di approfondimento
Link
| UGIdotNETWikiUGIdotNETWiki è il WikiWiki italiano dedicato a .NET Se è la prima volta che senti parlare di Wiki, leggi il BenvenutoAiVisitatori e WikiInUnMinuto, oppure il ManualePassoPassoDelWiki. Argomenti Recenti | ||||||||||||||||||||||||||||||||||||||
| © 2008 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali | ||||||||||||||||||||||||||||||||||||||||