Gdzie jest korzyść z używania wzoru strategii?
Obejrzałemto wyjaśnienie na Wikipedii, szczególnie próbka C ++, i nie rozpoznają różnicy między właśnie definiowaniem 3 klas, tworzeniem instancji i wywoływaniem ich, a tym przykładem. Widziałem jedynie umieszczenie dwóch innych klas w procesie i nie widzę, gdzie będzie korzyść. Teraz jestem pewien, że brakuje mi czegoś oczywistego (drewno na drzewa) - czy ktoś mógłby to wyjaśnić za pomocą ostatecznego przykładu w świecie rzeczywistym?
Co mogę wyciągnąć z dotychczasowych odpowiedzi, wydaje mi się, że jest to bardziej złożony sposób:
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-update] Funkcja I, o której mowa powyżej, została zastąpiona inną klasą, w której MoveAlong byłby atrybutem ustawionym zgodnie z potrzebą w oparciu o algorytm zaimplementowany w tej nowej klasie. (Podobnie jak w zaakceptowanej odpowiedzi).
[Edytuj aktualizację]Wniosek
Wzorzec strategii ma swoje zastosowanie, ale mocno wierzę w KISS i dążyłbym do bardziej prostych i mniej zaciemnionych technik. Głównie dlatego, że chcę przekazać łatwy w utrzymaniu kod (bo najprawdopodobniej będę musiał dokonać zmian!).