Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
I 6 pattern comportamentali
Mediator
Memento
Iterator (Iteratore)
Visitor (Visitatore)
Chain of Responsibility (Catena di
responsabilità)
Interpreter (Interprete)
Conclusioni
© A. Milani - Design pattern 3
18. Mediator (Mediatore)
Scopo
Un oggetto incapsula le modalità di interazione
fra oggetti…
…evitando a tutti gli oggetti di “conoscere” tutti
gli altri
+ a()
+ a1()
+ a2()
a -> …
... C
....b1(...);
+ c()
+ c1()
+ c2()
B c ->
...
b -> ....a1(...);
+ b() ...
+ b1() ....b2(...);
....a1(...);
+ b2() ....a2(...);
....c2(...);
....c1(...);
© A. Milani - Design pattern 6
Con Mediator
A
+ a()
+ a1()
+ a2()
M C
+ aM() + c()
…
a ->
... + bM() + c1()
....aM(…); + cM() + c2()
aM ->
B ....b1(...);
+ b() bM ->
+ b1() ....a1(...); c ->
+ b2() ....a2(...); ...
....c2(...); ....cM(...)
b -> ....c1(...);
...
....bM(...); cM ->
....a1(...);
© A. Milani - Design pattern ....b2(...); 7
Commenti (1/2)
Diminuisce l’accoppiamento A – B – C
+ D, E, F, G,…!!
Da O(N2) a O(N)
È più facile, ad es.:
Specializzare una modalità di comunicazione:
sottoclasse di M e basta
sostituire A con A1 e A2
-mediator Partner
Mediator
Façade
Anche lì un oggetto “nasconde” una situazione
complicata. Però:
Façade: comunicazione unidirezionale
Mediator: comunicazione bidirezionale
Observer
Mediator potrebbe essere un Observer,
che “propaga” i cambiamenti di stato
e i vari partner gli oggetti osservati, che
si registrano
notificano il mediatore quando cambiano stato
© A. Milani - Design pattern 11
20. Iterator (Iteratore)
Scopo
Fornire un modo di accesso sequenziale agli
elementi di un oggetto composto…
…senza esporre la struttura dell’oggetto
composto
Es.:
Scorrere una lista
+ ancora()
Composto
+ prossimo()
+ creaIt eratore()
<<istantiates>> IteratoreConcreto
CompostoConcreto
+ creaIteratore()
creaIteratore ->
return new IteratoreConcreto();
<<Interface>>
<<Int erface>> <<Int erface>>
List
List It erator Set
+ ListIterator iterator()
ArrayList
© A. Milani - Design pattern 17
Legami con altri pattern
Factory Method
Per generare l’iteratore opportuno
Iterator e Composite
Uso tipico
Un po’ complicato, deve tenere traccia della
posizione su un albero
Comodo per implementare visite ≠
(breadth/depth-first, ecc.)
Gest ore
Cl iente
+ gestisciRichiesta() -successore
Scopo
Dato un linguaggio
definisce una rappresentazione per la sua
grammatica
e un interprete che usa la rappresentazione per
interpretare le frasi del linguaggio
“Come fare un interprete per un linguaggio
semplice”
(A and true) or (B or C)
A and (B or C)
...
+ eval(Context)
+ eval(Context) + eval(Context)
Constant Variable
Not And Or
- value : Bool - name : char
+ eval(Contex t) + eval(Context) + eval(Context) -op2
+ eval(Context) + eval(Context)
-op2
Context
Client AbstractExp
+ interpret(Context)
+ interpret(Context) + interpret(Context)
Composite
L’albero sintattico è un Composite
Flyweight
Per condividere i simboli terminali
Iterator
Si può usare per attraversare la struttura
Visitor
interpret() e altri metodi possono essere in
una gerarchia Visitor separata
http://www.netobjectives.com/ [ST]
PLoP: Pattern Languages of Programs Conference
http://www.hillside.net/conferences/plop.htm
http://www.hillside.net/