Я посмотрел на это объяснение в Википедии , в частности, на примере C ++, и не смог распознать разницу между определением трех классов, созданием экземпляров и их вызовом, и этим примером. То, что я увидел, просто включило в процесс два других класса и не смог понять, в чем будет польза. Теперь я уверен, что упускаю что-то очевидное (дрова для деревьев) - может, кто-нибудь объяснит это на конкретном реальном примере?
Что я могу сделать из ответов до сих пор, мне кажется, это просто более сложный способ сделать это:
have an abstract class: MoveAlong with a virtual method: DoIt()
have class Car inherit from MoveAlong,
implementing DoIt() { ..start-car-and-drive..}
have class HorseCart inherit from MoveAlong,
implementing DoIt() { ..hit-horse..}
have class Bicycle inherit from MoveAlong,
implementing DoIt() { ..pedal..}
now I can call any function taking MoveAlong as parm
passing any of the three classes and call DoIt
Isn't this what Strategy intents? (just simpler?)
[Edit-обновление]
Функция, на которую я ссылаюсь выше, заменяется другим классом, в котором MoveAlong будет атрибутом, который устанавливается в соответствии с потребностями на основе алгоритма, реализованного в этом новом классе. (Подобно тому, что продемонстрировано в принятом ответе.)
[Редактировать-обновить] Заключение
У Паттерна Стратегии есть свои применения, но я твердо верю в KISS и склоняюсь к более простым и менее запутанным методам. Главным образом, поскольку я хочу передать легко поддерживаемый код (и, скорее всего, я буду тем, кто должен будет внести изменения!).