Factory method: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Atarubot (discussione | contributi)
template citazione; fix parametro isbn
AttoBot (discussione | contributi)
m Bot: orfanizzo template; modifiche estetiche
Riga 1:
[[File:FactoryMethod.svg|thumb|upright=1.4|Schema logico del Factory method in [[Unified Modeling Language|UML]]]]
[[ImageFile:Factory Method pattern in LePUS3.png|thumb|upright=1.4|Schema logico del Factory method in [[LePUS3]]]]
 
Nella [[Programmazione orientata agli oggetti|programmazione ad oggetti]], il '''Factory Method''' è uno dei [[design pattern]] fondamentali per l'implementazione del concetto di [[factory (informatica)|factories]]. Come altri [[pattern creazionali]], esso indirizza il problema della creazione di [[oggetto (informatica)|oggetti]] senza specificarne l'esatta [[classe (informatica)|classe]]. Questo pattern raggiunge il suo scopo fornendo un'[[interfaccia (informatica)|interfaccia]] per creare un oggetto, ma lascia che le sottoclassi decidano quale oggetto istanziare.<ref>[[Design Patterns|Gang Of Four]]</ref>
Riga 41:
</source>
 
Nel codice summenzionato, il costruttore <code>MazeGame</code> è un template che fornisce della logica comune e fa riferimento al metodo factory <code>makeRoom</code> che incapsula la logica di creazione delle stanza in modo che le stanze possano essere utilizzate nelle sottoclassi. Per implementare l'altra modalità di gioco, infatti, è necessario solo ridefinire <code>makeRoom</code> per l'implementazione delle stanze magiche:
 
<source lang=Java>
Riga 85:
</source>
 
== Limitazioni ==
Ci sono tre limitazioni, all'uso di questo metodo. Il primo è relativo al [[refactoring]], gli altri due sono relativi all'estensione di classi.
 
Riga 94:
* La terza limitazione è dovuta al fatto che, se estendiamo una classe (ad esempio rendendo il costruttore 'protected'; rischioso ma possibile), le sottoclassi devono precedere la reimplementazione di tutti i metodi di factory con la stessa dichiarazione. La possibilità, fornita da alcuni linguaggi, di usare le classi reflection può, tuttavia, risolvere questo problema.
 
== Note ==
{{Reflistreferences}}
 
== Voci correlate ==
* ''[[Design Patterns]]'', il libro della [[gang of four]] che ha introdotto il pattern
* [[Design pattern]], introduzione generale ai design pattern