3. Problema introduttivo
• La classe MyArray rappresenta vettori di numeri
• Un suo metodo esegue la stampa dell’array secondo due
formati:
– MathFormat (es. )
– StandardFormat (es. )
• Questi formati potrebbero essere in futuro sostituiti da altri
Come isolare l’algoritmo di formattazione del contenuto
Come isolare l’algoritmo di formattazione del contenuto
dell’array ,, per farlo variare in modo indipendente dal
dell’array per farlo variare in modo indipendente dal
resto dell’implementazione della classe?
resto dell’implementazione della classe?
Ingegneria del Software - A.A. 2003/2004
6. Il pattern Strategy (1/7)
• Nome Strategy [GoF95]
• Synopsis Consente la definizione di una famiglia di algoritmi, li
incapsula e li rende intercambiabili tra loro.
Lo Strategy permette di cambiare l’algoritmo
utilizzato indipendentemente dal client che lo usa.
• Context Cfr. esempio introduttivo
• Forces - Un programma deve fornire più varianti di un
algoritmo o comportamento.
- Si vuole incapsulare “differenze comportamentali”
in classi separate ed offrire un modo consistente di
accesso a tali comportamenti.
Ingegneria del Software - A.A. 2003/2004
7. Il pattern Strategy (2/7)
Client
• Solution - Gli “attori” del pattern Iterator sono:
– Client: Classe che desidera ignorare “chi” e “come” implementerà un
determinato algoritmo o comportamento
– AbstractStrategy: Contratto che definisce le regole di accesso alle
classi che implementano l’algoritmo o comportamento sopra citato
– ConcreteStrategyX: Classi che implementano l’algoritmo o
comportamento sopra citato
Ingegneria del Software - A.A. 2003/2004
8. Il pattern Strategy (3/7)
• Consequences Permette di determinare dinamicamente il
comportamento di oggetti client
eliminando cascate di if o switch
• Implementation -
• Java API usage Nel package java.util.zip:
Ingegneria del Software - A.A. 2003/2004
9. Il pattern Strategy (4/7)
• Code
example
Ingegneria del Software - A.A. 2003/2004