Intento:
Definire una famiglia di algoritmi, incapsularli tutti e renderli intercambiabili. Il pattern Startegy infatti lascia che gli algoritmi possano variare in base a chi e come li richiama.
Applicabilità:
Il pattern è da utilizzare quando:
- ci sono molte classi relazionate che differiscono solo per il loro comportamento. Strategy fornisce un metodo per configurare una classe con uno dei tanti comportamenti.
- C’è bisogno di differenti varianti di un algoritmo.
- Un algoritmo utilizza dati che i colui che li richiama non conosce.
- Una classe definisce molti comportamenti ed esegue una serie di istruzioni condizionali multiple. Invece di molte istruzioni condizionali, ognuna viene inserita all’interno della propria classe Strategy
Partecipanti:
- Startegy → dichiara una interfaccia comune a tutti gli algoritmi supportati. Context utilizza questa interfaccia per richiamare l’algoritmo definito da ConcreteStrategy
- ConcreteStrategy → implementa gli algoritmi in base alla interfaccia Strategy
- Context → è configurato con un oggetto di tipo ConcreteStrategy, mantiene un riferimento con l’oggetto Strategy, può definire una interfaccia che permette a Strategy di accedere ai propri dati
Conseguenze:
Il pattern Strategy ha queste conseguenze:
- Vengono create famiglie di algoritmi
- Rappresenta una alternativa all’utilizzo di sottoclassi, in fatti l’ereditarietà rappresenta un modo diverso di gestire vari algoritmi
- Le strategie eliminato le istruzioni condizionali
- Viene fornita una scelta dal punto di vista implementativo, infatti ci possono essere diverse implementazioni per o stesso comportamento
- I Clients sono consapevoli delle diverse strategie adottabili
- Esiste un sovraccarico di comunicazione tra strategia a contesto
- Cresce sensibilmente il numero di oggetti.









