8. CREANDO SIMPLE PIZZA FACTORY
La classe SimplePizzaFactory ha l'unico scopo - creare le pizze
codice spostato dall'ordinaPizza()
9. PAUSA DI RIFLESSIONE
• Quali sono i vantaggi? Non abbiamo
semplicemente spostato il problema dal metodo
orderPizza() nel createPizza()?
Ora SimpleFactory può essere utilizzata dove c'è
bisogno della istanziazione di una pizza. Un esempio
può essere PizzaShopMenu oppure HomeDelivery.
10. PAUSA DI RIFLESSIONE
• Il metodo createPizza() può essere dichiarato
statico?
Si, si chiama "static factory" ed il vantaggio è ben
evidente, non c'è bisogno di istanziare la
SimplePizzaFactory. Ma ha anche degli svantaggi: non
è possibile estendere la fabbrica per cambiare il
comportamento del metodo
11. COSTRUENDO LA PIZZERIA
Pizzeria prende come
parametro del
costruttore
una fabbrica
Creazione della pizza
ora avviene nella fabbrica
14. CAMBIO DEI REQUISITI
La pizzeria, prepara gli oggetti (pizze) davvero ottime, quindi il
proprietario decide di espandere la sua rete, creando una
catena di pizzerie.
Pizzeria
Le pizze vengono
preparate nello stesso modo
SalernoFactory
MilanoFactory
15. CAMBIO DEI REQUISITI
Fabbrica tipica milanese
Il procedimento di
preparazione è sempre
LO STESSO
Lo stesso procedimento
porta ai vincoli nella
composizione!
16. FACTORY METHOD
PATTERN
... come altri pattern creazionali, esso indirizza il problema della
creazione di oggetti senza specificarne l'esatta classe. Questo pattern
raggiunge il suo scopo fornendo un'interfaccia per creare un oggetto,
ma lascia che le sottoclassi decidano quale oggetto istanziare.
18. FACTORY METHOD
• Dobbiamo dare la
possibilità alle sottoclassi
della classe "Pizzeria"
decidere la preparazione
delle pizze.
creaPizza è un metodo
astratto, quindi deve
essere per forza
implementato dalle
sottoclassi
19. RITORNANDO ALLA PIZZERIA
la sottoclasse decide
come creare la pizza
creazione avviene
nel metodo astratto
dell'istanza
FACTORY METHOD
21. COSA ABBIAMO FATTO?
Istanziamo la pizzeria
Facciamo un ordine
pizzeriaSa, nel metodo ordinePizza invoca creaPizza
Metodi di preparazione sono definiti nei factory methods,
quindi sono sovrascritti dalle sottoclassi
26. SCOPO ED IMPLEMENTAZIONE
Il singleton è un design pattern creazionale che ha lo scopo di
garantire che di una determinata classe venga creata una e una
sola istanza, e di fornire un punto di accesso globale a tale istanza.
L'implementazione più semplice di
questo pattern prevede che la classe
singleton abbia un unico costruttore
privato, in modo da impedire
l'istanziazione diretta della classe. La
classe fornisce inoltre un metodo
"getter" statico che restituisce una
istanza della classe (sempre la stessa),
creandola preventivamente o alla prima
chiamata del metodo, e
memorizzandone il riferimento in un
attributo privato anch'esso statico.