استراتيجية ضد السياسة والسياسة ضد الاستراتيجية

StackOverflow https://stackoverflow.com/questions/231318

سؤال

عندما اكتشفت نمط الإستراتيجية لأول مرة ، شعرت بالدهشة من الاحتمالات التي لا نهاية لها على ما يبدو الذي قدمته لي وبرامجي. يمكنني أن أغلف سلوك النماذج الخاص بي بشكل أفضل وحتى تبادل هذا السلوك أثناء الطيران. ولكن يمكن أيضًا استخدام الاستراتيجية لتوفير السمات والحمولة النافعة للكائن المحتوي - البيانات التي تم إعلانها في فئة فائقة. كانت الحياة بخير.

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_; };

وعلى طول نمط السياسة وسيسمح لي بمزيد من المرونة في توفير المعلمات لفئة تحتوي للحصول على استراتيجية!).

class MyMonsterTrait { typedef typename ElveAI AI; };

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

يبدو أن كلا النموذجين قويان للغاية بالنسبة لي وأحب استخدام كليهما ، في ظروف مختلفة. لكنني لست متأكدًا مما إذا كانت هناك تطبيقات خاصة/نموذجية/أكثر انتشارًا لأي من الحالات.

أنا أتساءل: أين تستخدم الاستراتيجيات وأين السياسات؟ أين إما أكثر ملاءمة؟

هل كانت مفيدة؟

المحلول

يتم تعيين السياسات إلى حد كبير في وقت الترجمة ، في حين يتم تحديد الاستراتيجيات في وقت التشغيل. علاوة على ذلك ، فإن السياسات هي عمومًا مفهوم C ++ ، وتطبق فقط على أقلية من اللغات الأخرى (على سبيل المثال D) ، في حين أن نمط الإستراتيجية متاح للعديد من اللغات الموجهة (الأكثر؟) ، واللغات التي تعامل وظائفها كمواطنين من الدرجة الأولى مثل Python .

ما قيل:

  • إن السياسة ، التي يتم تحديدها في وقت الترجمة ، مفيدة بشكل عام فقط للمواقف الخاصة حيث تريد منطق تطبيق مختلف على أساس لكل ثنائي. على سبيل المثال ، يمكنك تطوير برنامج مخصص قليلاً لكل عميل ، سواء عبر واجهة ويب ، أو باليد ، سيكون هذا نمطًا قائمًا على السياسة.

  • يتم تحديد استراتيجية في وقت التشغيل ، وفي الواقع يمكن تغييرها أثناء الطيران. على سبيل المثال ، قد يكون لديك برامج تنفذ واجهة مستخدم مختلفة ومنطق لـ Salesforce مقارنة بمجموعة الدعم ، لكن عليهم جميعًا التعامل مع نفس معلومات العميل والترخيص بدلاً من وجود اثنين من التطبيقات التي يتم الحفاظ عليها بشكل منفصل ببساطة تطبيق واحد يتمتع به تطبيق واحد تغييرات الواجهة حسب الحاجة.

-آدم

نصائح أخرى

اعتقدت أنهم كانوا نفس الشيء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top