Frage

Als ich das Strategiemuster zum ersten Mal entdeckte, war ich erstaunt über die scheinbar endlosen Möglichkeiten, die es mir und meinen Programmen angeboten hat. Ich könnte das Verhalten meiner Modelle besser zusammenfassen und dieses Verhalten sogar im laufenden Fliegen austauschen. Die Strategie könnte aber auch verwendet werden, um dem enthaltenden Objekt Merkmale und Nutzlasten bereitzustellen - Daten, die in einer Superklasse deklariert wurden. Das Leben war in Ordnung.

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 da kam das politische Muster und es würde mir eine noch größere Flexibilität bei der Lieferung von Parametern an eine enthaltende Klasse ermöglichen - ganze Klassen, ausgestattet, wie ich mochte, wenn auch dynamisch das Verhalten austauschte ... das war nicht allzu einfach (es sei denn, ein Teil der Richtlinie war ein Teil der Richtlinie eine Strategie haben!).

class MyMonsterTrait { typedef typename ElveAI AI; };

template< class MonsterTrait >
class Monster : public MonsterTrait::AI
{
    void idle (void) { attack(); }
};

Beide Muster scheinen für mich sehr mächtig zu sein, und ich benutze unter verschiedenen Umständen gerne beide. Ich bin mir jedoch nicht sicher, ob es in einigen Situationen bestimmte/typische/praktische Anwendungen in beiden Situationen gibt.

Ich frage mich: Wo verwenden Sie Strategien und wo Richtlinien? Wo sind entweder besser geeignet?

War es hilfreich?

Lösung

Die Richtlinien werden größtenteils zur Kompilierungszeit festgelegt, während Strategien zur Laufzeit festgelegt werden. Darüber hinaus sind Richtlinien im Allgemeinen ein C ++ - Konzept und gilt nur für eine Minderheit anderer Sprachen (z. B. D), während das Strategiemuster vielen (meisten?) Objektorientierten Sprachen und Sprachen zur Verfügung steht, die Funktionen als erstklassige Bürger wie Python behandeln .

Davon abgesehen:

  • Eine Richtlinie, die zur Kompilierung ermittelt wird, ist im Allgemeinen nur für besondere Situationen nützlich, in denen Sie eine unterschiedliche Anwendungslogik pro-binär wünschen. Zum Beispiel können Sie Software entwickeln, die für jeden Kunden leicht angepasst ist, sei es über eine Weboberfläche oder von Hand, dies wäre ein von Richtlinien basierendes Muster.

  • Eine Strategie wird zur Laufzeit ermittelt und kann tatsächlich im laufenden Flug geändert werden. Zum Beispiel haben Sie möglicherweise eine Software, die eine andere Benutzeroberfläche und Logik für die Salesforce implementiert als für die Support -Gruppe. Sie müssen sich jedoch alle mit denselben Kunden- und Lizenzinformationen befassen, anstatt zwei separat gepflegte Apps zu haben, die Sie einfach eine App haben, deren App einfach eine App haben Schnittstellenänderungen nach Bedarf.

-Adam

Andere Tipps

Ich dachte, sie wären die gleiche Sache.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top