In Head First Design Patterns insegna il modello di strategia usando un esempio Duck in cui diverse sottoclassi di Duck possono essere assegnate un comportamento particolare in fase di esecuzione. Dalla mia comprensione, lo scopo del modello di strategia è quello di cambiare il comportamento di un singolo oggetto in fase di esecuzione, eppure stanno usando l'eredità di Anatra per cambiare il comportamento di vari tipi di Anatra.
Rilevanza?
L'ereditarietà del contesto di Duck è irrilevante per il modello di strategia o la variazione dei tipi di Duck e anche il variare dei loro comportamenti è una buona ragione per impiegare il modello di strategia? Le situazioni in cui è necessario variare costituiscono entrambe una buona ragione per utilizzare il modello di strategia? Perché dovrebbero includere questo come esempio di modello di strategia?
Un esempio più semplice
Potrei semplificare ulteriormente questo esempio semplicemente avendo una classe Duck (nessuna classe derivata)? Quindi, quando si implementa un oggetto anatra, è possibile assegnare comportamenti diversi in base a determinate circostanze che non dipendono dal proprio tipo di oggetto. Ad esempio: FlyBehavior cambia in base al tempo o QuackBehavior cambia in base all'ora del giorno o alla fame di un'anatra. Mi rendo conto che questo risolverebbe un problema diverso rispetto a quello del libro, ma quello che sto cercando è un esempio di modello di strategia pertinente su cui fare affidamento.
Il mio esempio sopra costituirebbe anche il modello di strategia?
Modificare:
Sono riuscito a trovare 2 esempi di schemi strategici più semplici che aderiscono più strettamente all'essere solo schemi strategici senza ereditarietà del contesto: Hunter.java e solver.py .