SlideShare a Scribd company logo
TPA 2015/2016
Creational patterns
Factory method, singleton
Renato Grappone
Sergiy Shevchenko
PRIMA DI PARTIRE
PRIMA DI PARTIRE
Qual'è il problema nell'utilizzare un costruttore al momento
opportuno?
Interfaccia
Classe concreta

implementa interfaccia "Pizza"
IDENTIFICHIAMO IL PROBLEMA
IDENTIFICHIAMO IL PROBLEMA
cambia anche la ricetta
il tipo di pizza può cambiare
IDENTIFICHIAMO IL PROBLEMA
parte del codice che varia
nel tempo
la preparazione non cambia
INCAPSULAMENTO
viene spostato
dall'orderPizza()
SimplePizzaFactory
e diventa una Factory
CREANDO SIMPLE PIZZA FACTORY
La classe SimplePizzaFactory ha l'unico scopo - creare le pizze
codice spostato dall'ordinaPizza()
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.

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
COSTRUENDO LA PIZZERIA
Pizzeria prende come

parametro del
costruttore
una fabbrica
Creazione della pizza
ora avviene nella fabbrica
"fabbrica"
interfaccia
"cliente"
varie implementazioni
ABBIAMO
DEFINITO UNA
FABBRICA
ASTRATTA?
No! SimplePizzaFactory è
solamente una idioma, una
parte del design pattern
Abstract Factory.Arriveremo
al quadro completo tra poco...
Si
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
CAMBIO DEI REQUISITI
Fabbrica tipica milanese
Il procedimento di
preparazione è sempre
LO STESSO
Lo stesso procedimento
porta ai vincoli nella
composizione!
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.
FACTORY METHOD
class diagramm
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
RITORNANDO ALLA PIZZERIA
la sottoclasse decide

come creare la pizza
creazione avviene

nel metodo astratto

dell'istanza
FACTORY METHOD
RITORNANDO ALLA PIZZERIA
"override" del metodo
di creazione della pizza
Per un'altra pizzeria
le pizze possono
essere completamente

diverse
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
DOMANDE?
ESEMPIO IN
SINGLETON PATTERN
SINGLETON CLASS DIAGRAMM
l'istanza statica

della classe stessa
costruttore privato
metodo statico
restituisce singleton
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.
PYTHONIC SINGLETON
Q&A

More Related Content

PDF
Lezione 5: Design Pattern Creazionali
PDF
Design patterns
ODP
Design Pattern
PDF
Lezione 04 - Factory method
PPTX
Design Pattern Creazionali
PDF
Design pattern template method
PDF
Lezione 01 - Singleton
PDF
Design patterns - parte 1
Lezione 5: Design Pattern Creazionali
Design patterns
Design Pattern
Lezione 04 - Factory method
Design Pattern Creazionali
Design pattern template method
Lezione 01 - Singleton
Design patterns - parte 1

More from Sergio Shevchenko (12)

PDF
Gestione dell'economia nelle reti di Self Sovereign Identity con Algorand Sm...
PDF
Kubernetes - from sketch to production
PDF
Meltdown & spectre
PDF
The Google file system
PDF
μ-Kernel Evolution
PDF
Burrows-Wheeler transform for terabases
PDF
Presentazione CERT-CHECK
PDF
Bitcoin and blockchain
PDF
Qt Multiplatform development
PDF
Qt for beginners
PPTX
Continuous Integration
PPTX
Mobile Factor App
Gestione dell'economia nelle reti di Self Sovereign Identity con Algorand Sm...
Kubernetes - from sketch to production
Meltdown & spectre
The Google file system
μ-Kernel Evolution
Burrows-Wheeler transform for terabases
Presentazione CERT-CHECK
Bitcoin and blockchain
Qt Multiplatform development
Qt for beginners
Continuous Integration
Mobile Factor App
Ad

Design patterns: Creational patterns