Design Pattern 2 Strutturali Proxy Flyweight
Design Pattern 2 Strutturali Proxy Flyweight
Strutturali 2
Alfredo Milani
Dipartimento di Matematica e Informatica
Università degli Studi di Perugia
Classificazione dei pattern
Strutturali Creazionali Comportamentali
1. Adapter 8. Factory 13. Template Method
(Adattatore) Method (Metodo sagoma)
2. Façade (Metodo 14. Strategy (Strategia)
(Facciata) fabbrica) 15. State (Stato)
3. Composite 9. Abstract
16. Command (Comando)
(Composto) Factory
(Fabbrica 17. Observer (Osservatore)
4. Decorator 18. Mediator (Mediatore)
(Decoratore) astratta)
10. Singleton 19. Memento (Memento,
5. Bridge Ricordo)
(Ponte) (Singoletto)
11. Prototype 20. Iterator (Iteratore)
6. Proxy
(Proxy) (Prototipo) 21. Visitor (Visitatore)
12. Builder 22. Chain of Responsibility
7. Flyweight
(Peso piuma) (Costruttore) (Catena di responsabilità)
© A. Milani - Design pattern
23. Interpreter (Interprete) 2
Sommario
Obiettivo x; ClassAdapter
...
x.m(); m -> thi s.m '();
+ m()
+ m() + m'()
ObjectAdapter
Obiettivo x;
... -adattato
x.m(); + m()
m -> adattato.m'()
sottosistema
C1
Cl ie nt Facade
C4
C2
C5 C6
C3
+ operation()
+ add() n
+ remove()
+ getChildren()
Leaf Composite
+ operation() + operation()
+ add() -children
+ remove()
+ getChilldren()
+ operazione() 1
+ operazione() + operazione()
operazione ->
decorato.op erazione()
Decoratore2 Decoratore1
- statoAggiunto
+ operazio ne()
+ com portam entoAggiunti vo() + operazione()
operazione ->
super.ope razi one();
comport amentoAgg iunt o();
© A. Milani - Design pattern 8
Esercizio
Caffè 110
Vende “cibarie”
Pizze, calzoni, toast, tramezzini, piadine, panini,
focacce, …
Con ingredienti a scelta fra:
Prosciutto, formaggio, mozzarella, funghi, spinaci,
speck, gorgonzola, nutella, marmellata, …
Eventualmente “doppi” o “tripli” o …
Non modellate tutta la gestione, solo le classi
che consentano la creazione di cibarie
© A. Milani - Design pattern 9
Caffè 110 1/4
…
Ingredienti
Così?
Ingredienti
0.. n
Cliente Cibaria
Cibaria c1 =
new ConMarmellata( CibariaDiBase Ingredienti
new ConProsciutto(
new ConProsciutto(
new Pizza());
Cibaria c2 = new Pizza());
Cibaria c3 =
new ConMarmellata(
Pizza … Focaccia ConProsciutto
… ConMarmellata
new ConAsparagi(
new ConProsciutto(
new Focaccia());
È un Decoratore?
Che responsabilità/funzionalità aggiungo?
È un Composite?
Però aggiungo un solo ingrediente alla volta, non
raggruppo…
un po’ Decoratore senza aggiunta di
funzionalità, un po’ Composite “degenere”…
+ draw()
+ getDimension()
+ store()
+ load()
ProxyFigure RealFigure
- fileName - ...implementation...
-figure
getDimension() -> + draw() + draw()
if (figure==null) + getDimension() + getDimension()
return figure.getDimension(); + store() + store()
else + load() + load()
return dim;
+ request()
+ request() + request()
request ->
...
real.request();
Commento
... Pattern facile
Altro tipo di “wrapper”
Scopo
Usare la condivisione di oggetti/istanze
per rappresentare in modo efficiente un gran
numero di oggetti
[a granularità fine (?)]
Migliorare le prestazioni (usare meno
memoria)
“Performance hack” [Eckel]
…
Flyweight
X' -flyweight - x2
Tanti Cliente
- x1 - ...
(10^6) - xn
… …
Spesso utilizzato il