Versioni
| Conosciuto anche comeNo ha altri nomi. IntentoIl design pattern Prototype istanzia un oggetto clonandolo da un'istanza esistente, in questo modo
La nuova istanza 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#Creazionali. Diagramma UML
Un'altro diagramma equivalente qui . MotivazioneIn alcuni casi il metodo Clone del Prototype è il metodo più comodo per istanziare degli oggetti:
In alcuni casi un sistema o una libreria ha bisogno di un certo grado di dinamicità ossia deve essere indipendente da come i suoi oggetti vengono istanziati, inizializzati, composti e organizzati. Il design pattern Prototype permette di creare a run-time un pool di istanze prototipo (ad esempio inizializzate e valorizzate a run-time in base a parametri di configurazione esterni) dalle quali verranno istanziate, inizializzate e composte tutte le altre istanze create dalla libreria e dal sistema. Esempi d'uso in .NETIn .NET ci sono esempi di applicazione del design pattern Prototype relativamente alla possibilità di creare cloni mentre non ci sono esempi di pool di istanze prototipo usate al posto di classi distinte e mantenute come "stampo" per creare nuove istanze. L'interfaccia System.IClonable corrisponde all'interfaccia Prototype entrambe con il metodo Clone, le classi .NET che supportano questa interfaccia sono elencate qui: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemicloneableclasstopic.asp Note sulla implementazione in .NETL'oggetto System.Object da cui derivano tutti i value-type e reference-type di .NET ha il metodo protetto MemberwiseClone che ogni classe e struttura può utilizzare per implementare il metodo Clone di System.IClonable. MemberwiseClone effettua una copia bit-per-bit in modo non ricorsivo, eventuali oggetti referenziati dall'oggetto copiato non sono a loro volta copiati ma semplicemente referenziati. Del codice .NET di esempio è disponibile qui . Relazione con altri design patternIl design pattern Prototype e il PatternAbstractFactory in alcuni casi svolgono la stessa funzione, uno attraverso una RelazioneDiContenimento l'altro attraverso una RelazioneDiEreditarietà. Possono essere usati anche insieme. Quando c'è un uso esteso del PatternComposite e del PatternDecorator è probabile che possa risultare utile anche il design pattern Prototype. Il design pattern Prototype spesso è usato insieme al PatternCommand. Vedi la mappa della RelazioneTraDesignPattern. ApprofondimentiIn altri casi quando alcune classi differiscono solo per alcune proprietà possono essere ricondotte ad un'unica classe (ConcretePrototype1) e le classi distinte possono essere sostituite da prototipi distinti (istanze di ConcretePrototype1) di quella classe (ConcretePrototype1). In questo modo il design pattern Prototype permette di ridurre il numero di classi distinte. In altri casi ancora istanze di una classe possono essere inizializzate con un numero limitato di combinazioni di stati (i valori di inizializzazione di property e field), in questi casi il design pattern Prototype permette di disporre di un numero limitato di prototipi da clonare in alternativa a dover istanziare le classi manualmente. La parte più difficile di implementazione di questo design pattern è implementare il metodo Clone, diventa particolarmente difficile gestire i casi di riferimenti circolari. La parte più difficile di applicazione di questo design pattern è individuare il pool di istanze prototipo. 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 | ||||||||||||||||||||||||||||||||||||||||