Considera una percentuale eccellente diAnimal, ereditata da più sottoclassi ( Dog / Bird ). Nella loro istanziazione, gli oggetti hanno il loro stato locale e amp; comportamento:
The strategy pattern
- defines a family of algorithms,
- encapsulates each algorithm, and
- makes the algorithms interchangeable within that family.
Se un requisito richiede di aggiungere un nuovo comportamento ( fly() ) in super classe Animal , quindi utilizzare il modello di strategia, per creare una nuova famiglia di algoritmi ( CantFly / ItFly ) e incapsulare questi algoritmi in setFlyingAbility() / tryToFly() , per ottenere modifiche minime al codice nella gerarchia di classi esistente, con le seguenti modifiche:
doveItFylseCantFlysonofamigliedialgoritmipernuovocomportamento(fly)chevengonoutilizzatidallesottoclassi(Dog/Bird)inmodointercambiabile,conlemodifichealcodicesotto
L'associazione di tipo Composizione , in fase cruciale, sta contribuendo ad aggiungere un nuovo comportamento in super classe riducendo al minimo le modifiche al codice nella relazione super / sottocategoria, mostrata sotto,
class Animal{
....
Flys flyingType;
....
public String tryToFly(){
return flyingType.fly();
}
public void setFlyingAbility(Flys newFlyType){
flyingType = newFlyType;
}
}
Domanda:
Per aggiungere un nuovo comportamento ( fly() ) in super classe ( Animal ), il modello di strategia comporta la modifica di ogni costruttore di sottoclasse ( Dog / Bird )? La modifica della sottoclasse può essere evitata?

