Als ich das Strategie-Muster zum ersten Mal entdeckte, war ich erstaunt über die scheinbar endlosen Möglichkeiten, die es mir und meinen Programmen bot. Ich könnte das Verhalten meiner Models besser einkapseln und dieses Verhalten sogar spontan austauschen. Aber die Strategie könnte auch verwendet werden, um Eigenschaften und Nutzinformationen für das enthaltene Objekt bereitzustellen - Daten, die in einer Oberklasse deklariert wurden. Das Leben war in Ordnung.Eine Strategie gegen die Politik und eine Strategie gegen die Strategie
class MyMonsterAI { float const see_radius_; virtual void attack() = 0; /* .. */ };
class ElveAI { ElveAI() : see_radius_(150.0f) {} /* ... */ };
class CycloneAI { CycloneAI() : see_radius_(50.0f) {} /* ... */ };
class Monster { MyMonsterAI* ai_; };
Und entlang kamen die Muster-Politik und es würde mir noch mehr Flexibilität ermöglichen, bei der Versorgung Parameter an einem enthaltenden Klasse - ganze Klassen, ausgestattet aber ich mochte, wenn auch das Verhalten dynamisch auszutauschen ... das nicht zu einfach war (es sei denn, ein Teil der Richtlinie sollte eine Strategie haben!).
Beide Muster scheinen sehr mächtig zu sein, und ich mag beide unter verschiedenen Umständen zu verwenden. Aber ich bin mir nicht sicher, ob es in einigen Situationen bestimmte/typische/praktischere Anwendungen gibt.
Ich frage mich: Wo verwenden Sie Strategien und wo Richtlinien? Wo sind sie besser geeignet?
Ihr Beitrag ist so ziemlich die Zusammenfassung, warum ich C++ hassen – Mecki
Aber es hat einen großen Titel! – Mnebuerquo