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:
doveItFyls
eCantFly
sonofamigliedialgoritmipernuovocomportamento(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?