|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2000
Città: Udine
Messaggi: 3178
|
[Patterns] dubbi su Factory Method
ciao a tutti,
leggendo qua e la il factory method (in particolare questo link) mi sorge un dubbio sulla sua utilità. In particolare, riporto parte della definizione del pattern: La classe Creator deve in qualche modo creare un oggetto di classe Product, ed utilizzarlo nei suoi metodi. Nel diagramma, il metodo anOperation() ha bisogno di lavorare su un'istanza di Product: ma come farlo, visto che questa ultima è astratta? La classe Creator deve sì lavorare sull'interfaccia comune Product, ma nella realtà verranno creati dei ConcreteProduct specifici, che però non possono essere conosciuti a priori, visto che queste classi probabilmente ancora neanche esistono. Quindi creator deve lavorare su ConcreteProduct che di fatto non esistono ancora. il metodo anOperation() ha bisogno di lavorare su un'istanza di Product: Codice:
... Product p = this.factoryMethod(); p.doSomething1(); p.doSomething2(); ... Il problema è, con l'assegnazione Product p = this.factoryMethod(), il mio oggetto avrà solo le proprietà e i membri dell'interfaccia Product (se non si effettua un cast specifico), ma nessuna proprietà/metodo aggiunto da una sottoclassse di Product. Ovviamente. Allora che senso ha tutto il pattern? Sarabbe stato possibile definire anOperation() in una classe qualsiasi, con un oggetto di tipo Product passato come argomento, e lavorando su questa interfaccia. No?! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7260
|
ovviamente come tutti i pattern anche questo non va usato sempre, ma solo quando serve.
il primo esempio che mi viene in mente è quello dell'implementazione di una matrice. infatti a seconda del fatto che la matrice sia sparsa o meno è possibile usare implementazioni diverse per aumentare l'efficienza. a questo punto la classe Creator potrebbe controllare da sola se la matrice è sparsa o no e usare l'implementazione migliore in quel caso e il tutto sarebbe completamente trasparente al programmatore. vabbè magari non è l'esempio migliore comunque qualche utilità ce l'ha |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:04.



















