Wo ist der Vorteil bei der Verwendung der Strategie-Muster?

Habe ich mir angeschaut diese Erklärung auf Wikipedia, speziell die C++ - Beispiel, und erkennen nicht den Unterschied zwischen einfach nur die Definition von 3 Klassen, erzeugen von Instanzen und Aufruf von Ihnen, und das Beispiel. Was ich gesehen habe war die Platzierung nur zwei weitere Klassen in den Prozess und kann nicht sehen, wo es wäre ein Vorteil. Jetzt bin ich sicher, ich bin etwas fehlt offensichtlich (Holz für die Bäume) - könnte jemand bitte erklären Sie es mithilfe eines endgültigen real-world-Beispiel?


Was kann ich aus den Antworten so weit, es scheint mir nur eine komplexere Art und Weise, dies zu tun:

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]
Die Funktion Verweise ich auf oben ist ersetzt mit einer anderen Klasse, in der MoveAlong wäre Attribut, das gesetzt wird, je nach Bedarf basierend auf den implementierten Algorithmus in dieser neuen Klasse. (Ähnlich zu dem, was nachgewiesen ist, in der akzeptierten Antwort.)


[Edit-update] Abschluss

Dem Strategie-Muster hat es verwendet, aber ich bin ein starker Gläubiger in KISS, und würde dazu neigen, einfacher und weniger obfuscatory Techniken. Meist da möchte ich weitergeben leicht wartbaren code (und 'cos ich werde wahrscheinlich derjenige sein, der die änderungen!).

  • "Ist das nicht das, was Strategie-Absichten? (nur einfacher?)" <-- ziemlich viel, außer, dass Sie geben eine Referenz auf Ihre Klasse und lassen Sie die andere Klasse aufrufen, wenn es muss, während die anderen in der Klasse nur weiß, dass es eine MoveAlong. Es ist eines dieser Dinge, das ist mehr nützlich, in einer team situation.
  • Hallo gerald ich denke, Ihr Beispiel ist ein schlechtes Beispiel für Strategie-Muster. ja, es ist eine Strategie, die aber in deinem Fall wäre es besser zu haben als Unterklassen implementieren Strategie-Muster. Im ziemlich sicher, dass martian Uhr hätte anders Verhalten, als die Erde Uhr, daher lohnt es Unterklassen die Uhr Klasse.
  • lol... ich sah gerade diesen Kommentar. Ich nehme an, wenn Sie erwarten, dass die clients auf dem Mars, dass es sich lohnen könnte, sich Gedanken über eine mars-Uhr in Ihre Entwürfe. Aber da 100% der meisten Völker Klienten gehen zu den Menschen auf der Erde, mit einem universal-Zeit-Darstellung der Daten, ich denke es ist ziemlich sicher zu ignorieren, dass die edge-Fall, es sei denn, es ist für ein video-Spiel.
  • Aber Strategie-Muster ist Recht einfach, auch wenn Sie nur den code zu verwalten
InformationsquelleAutor slashmais | 2008-10-05
Schreibe einen Kommentar