Versioni
| IntentoIl design pattern Factory Method definisce un'interfaccia (Creator) per ottenere una nuova istanza di un oggetto (Product) delegando ad una classe derivata (ConcreteCreator) la scelta di quale classe istanziare (ConcreteProduct). La classe ConcreteCreator che determina quale classe ConcreteProduct istanziare è stabilita a design-time attraverso l'ereditarietà quindi questo design pattern è classificato rispetto allo scopo (vedi ClassificazioneDeiDesignPattern#ClassiOggetti) come rivolto alle classi. Rispetto al fine questo questo design pattern è classificato tra i ClassificazioneDeiDesignPattern#Creazionali Diagramma UML
Un'altro diagramma equivalente qui . MotivazioneUn componente od un framework può aver bisogno di delegare al programmatore che lo utilizza la scelta di quale classe istanziare. Ad esempio
Questa necessità è assolta dal design pattern Factory Method, invece di richiamare direttamente il costruttore della classe da istanziare il design pattern Factory Esempi d'uso in .NETUno dei Factory Method più usato in .NET è sicuramente il metodo GetEnumerator() dell'interfaccia IEnumerable che viene utilizzata dal framework quando il programmatore scrive un foreach su una collezione oppure quando il programmatore definisce la sua versione di IEnumerable quando implementa una nuova collezione. Un'altro esempio anche se di uso meno frequente è il metodo Create() della classe System.Net.WebRequest che in base al URI passato sceglie se istanziare la classe HttpWebRequest, FileWebRequest oppure FtpWebRequest. Un altro esempio che sarà d'uso comune in .NET 2.0 è il metodo GetFactory(providerInvariantName) della classe DbProviderFactories che a seconda del providerInvariantName indicato restituirà la corrispondente classe (ad esempio OdbcFactory, OleDbFactory, OracleClientFactory, SqlClientFactory). Note sulla implementazione in .NETUna convenzione di denominazione usata in alcune parti del .NET Framework per questo desin pattern consiste nel accodare Factory al nome della interfaccia che ha il ruolo di Creator (come per IIdentityPermissionFactory) e usare il prefisso Create al nome del metodo (come per CreateIdentityPermission). Del codice .NET di esempio è disponibile qui . Relazione con altri design patternVedi la mappa della RelazioneTraDesignPattern. ApprofondimentiInvece di usare una RelazioneDiEreditarietà per implementare ConcreteCreator derivandolo da Creator è possibile usare i Generics del C# 2.0 applicando il ParadigmaDiProgrammazioneGenerica per creare una versione generica di Creator che accetta il tipo ConcreteProduct come parametro. Domande di approfondimento
Linkhttp://c2.com/cgi/wiki?FactoryMethodPattern | 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 | ||||||||||||||||||||||||||||||||||||||||