В Head First Design Patterns он учит шаблону стратегии , используя пример Duck, где различным подклассам Duck может быть назначено определенное поведение во время выполнения. Насколько я понимаю, целью паттерна стратегии является изменение поведения одного объекта во время выполнения, но они используют наследование Duck для изменения поведения различных типов Duck.
Актуальность?
Является ли контекстное наследование утки несоответствующим шаблону стратегии или различные типы утки, а также их поведение являются хорошей причиной для использования шаблона стратегии? Являются ли ситуации, когда вам нужно варьировать оба, хорошей причиной для использования паттерна стратегии? Зачем им включать это в качестве примера шаблона стратегии?
Более простой пример
Могу ли я еще упростить этот пример, просто имея класс Duck (без производных классов)? Затем при реализации одного объекта утки ему могут быть назначены различные варианты поведения, основанные на определенных обстоятельствах, которые не зависят от его собственного типа объекта. Например: изменения FlyBehavior в зависимости от погоды или QuackBehavior изменяются в зависимости от времени суток или от того, насколько голодна утка. Я понимаю, что это решило бы проблему, отличную от той, которая описана в книге, но я ищу подходящий пример паттерна стратегии, к которому можно обратиться.
Будет ли мой пример, приведенный выше, также представлять собой образец стратегии?
Редактировать:
Мне удалось найти 2 более простых примера шаблонов стратегий, которые более строго придерживаются принципов стратегии без наследования контекста: Hunter.java и solver.py .