Zerknąłem na this explanation on Wikipedia, w szczególności na próbkę C++, i nie rozpoznałem różnicy między samym zdefiniowaniem 3 klas, tworzeniem instancji i wywoływaniem ich oraz tego przykładu. To, co zobaczyłem, polegało na umieszczeniu dwóch innych klas w procesie i nie było widać, gdzie byłaby korzyść. Teraz jestem pewien, że brakuje mi czegoś oczywistego (drewno dla drzew) - czy ktoś mógłby wyjaśnić to za pomocą ostatecznego przykładu w świecie rzeczywistym?Gdzie jest korzyść z używania wzorca strategii?
Co mogę zrobić z odpowiedzi tak daleko, wydaje mi się po prostu bardziej skomplikowany sposób to zrobić:
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 odsyłam do powyżej jest zastąpiony przez inną klasę, w której MoveAlong będzie atrybutem, który jest ustawiony zgodnie z potrzebą na podstawie algorytmu zaimplementowanego w tej nowej klasie. (Podobny do tego, co zostanie wykazane w przyjętym odpowiedź.)
[Edit-update] Wnioski
Strategia Wzór ma to zastosowania, ale jestem mocno wierzy w KISS, i na ogół do bardziej prostych i mniej obscuracyjnych technik. Głównie dlatego, że chcę przekazać łatwy do utrzymania kod (i "bo najprawdopodobniej będę tym, który musi wprowadzić zmiany!).
„Is not to, co ma zamiar strategia? (po prostu prostsze?) "<- prawie, z wyjątkiem tego, że podajesz odwołanie do swojej klasy i pozwalasz drugiej klasie wywoływać ją wtedy, gdy jest ona potrzebna, podczas gdy druga klasa wie tylko, że ma ruch typu MoveAlong. To jedna z tych rzeczy, która jest bardziej przydatna w sytuacji zespołowej. – Gerald
Witam gerald Myślę, że twój przykład jest złym przykładem wzoru strategii. tak, jest to strategia, ale w twoim przypadku lepiej byłoby mieć podklasy niż implementować wzorzec strategii. Jestem pewien, że zegar marsjański będzie miał inne zachowanie niż zegar naziemny, stąd jego wartość podklasuje klasę zegara. – RWendi
lol ... Właśnie zobaczyłem ten komentarz. Przypuszczam, że jeśli spodziewasz się mieć klientów na Marsie, to może warto martwić się o zegar marsjański w twoich projektach.Ale ponieważ 100% klientów większości ludzi będzie ludźmi na Ziemi, z uniwersalną reprezentacją danych czasowych, myślę, że całkiem bezpiecznie jest zignorować ten przypadek krawędzi, chyba że jest to gra wideo. – Gerald