Я рассмотрел это объяснение в Википедии, в частности образец С++, и не смог распознать разницу между просто определяющими 3 классами, создав экземпляры и вызов их, и этот пример. То, что я видел, просто помещало два других класса в процесс и не могло видеть, где будет польза. Теперь я уверен, что мне не хватает чего-то очевидного (дерева для деревьев) - может ли кто-нибудь объяснить это, используя окончательный пример реального мира?
Что я могу сделать из ответов до сих пор, мне кажется, что это просто более сложный способ сделать это:
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 и буду стремиться к более простым и менее обфускаторным методам. В основном, поскольку я хочу передать легко поддерживаемый код (и, поскольку я, скорее всего, буду тем, кто должен внести изменения!).