- In che modo questi tre schemi differiscono l'uno dall'altro?
Factory: crea oggetti senza esporre la logica di istanza al client.
Metodo di fabbrica: definire un'interfaccia per la creazione di un oggetto, ma lasciare che le sottoclassi decidano quale classe creare un'istanza. Il metodo Factory consente a una classe di rinviare l'istanza alle sottoclassi
Fabbrica astratta: fornisce un'interfaccia per la creazione di famiglie di oggetti correlati o dipendenti senza specificare le loro classi concrete.
Il modello AbstractFactory utilizza la composizione per delegare la responsabilità della creazione di oggetti in un'altra classe mentre il modello di progettazione del metodo Factory utilizza l'ereditarietà e si basa sulla classe o sottoclasse derivata per creare l'oggetto
- Quando usare quale?
Factory: il cliente ha solo bisogno di una classe e non si preoccupa di quale implementazione concreta sta ottenendo.
Metodo di fabbrica: il client non sa quali classi concrete sarà necessario creare in fase di esecuzione, ma vuole solo ottenere una classe che farà il lavoro.
AbstactFactory: quando il sistema deve creare più famiglie di prodotti o si desidera fornire una libreria di prodotti senza esporre i dettagli di implementazione.
Le classi Abstract Factory sono spesso implementate con il metodo Factory. I metodi di fabbrica sono generalmente chiamati all'interno dei metodi modello.
- E anche se possibile, qualche esempio java relativo a questi schemi?
Factory and FactoryMethod
Intent:
Definire un'interfaccia per la creazione di un oggetto, ma lasciare che le sottoclassi decidano quale classe creare un'istanza. Il metodo Factory consente a una classe di rinviare l'istanza alle sottoclassi.
Diagramma UML :
Prodotto: definisce un'interfaccia degli oggetti creati dal metodo Factory.
ConcreteProduct: implementa l'interfaccia del prodotto
Creatore: dichiara il metodo Factory
ConcreateCreator: implementa il metodo Factory per restituire un'istanza di ConcreteProduct
Dichiarazione del problema: crea una Factory of Games usando Factory Methods, che definisce l'interfaccia di gioco.
Snippet di codice:
Modello di fabbrica. Quando utilizzare i metodi di fabbrica?
Confronto con altri schemi di creazione:
Il design inizia con il metodo Factory (meno complicato, più personalizzabile, le sottoclassi proliferano) e si evolve verso Abstract Factory, Prototype o Builder (più flessibile, più complesso) man mano che il progettista scopre dove è necessaria maggiore flessibilità
Le classi Factory astratte sono spesso implementate con i metodi Factory , ma possono anche essere implementate usando Prototype
Riferimenti per ulteriori letture: modelli di progettazione per la creazione di sorgenti