जब मैंने पहली बार रणनीति पैटर्न की खोज की, तो मुझे लगता है कि यह मुझे और मेरे कार्यक्रमों की पेशकश की जाने वाली असीमित संभावनाओं से हैरान था। मैं अपने मॉडल के व्यवहार को बेहतर ढंग से समाहित कर सकता हूं और इस व्यवहार को फ्लाई पर भी बदल सकता हूं। लेकिन रणनीति का उपयोग उस वस्तु को गुण और पेलोड प्रदान करने के लिए भी किया जा सकता है - डेटा जो सुपरक्लास में घोषित किया गया था। जीवन ठीक था।नीति के खिलाफ रणनीति और रणनीति के खिलाफ नीति
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(); }
};
दोनों पैटर्न मेरे लिए बहुत शक्तिशाली प्रतीत होते हैं और मैं अलग-अलग परिस्थितियों में दोनों का उपयोग करना पसंद करता हूं। लेकिन मुझे यकीन नहीं है कि कुछ परिस्थितियों में या तो विशेष/विशिष्ट/अधिक व्यावहारिक अनुप्रयोग हैं।
मुझे आश्चर्य है: आप रणनीतियों और कहां नीतियों का उपयोग करते हैं? या तो बेहतर अनुकूल कहां हैं?
आपका पोस्ट काफी कारण है कि मैं सी ++ – Mecki
नफरत का सार है लेकिन यह एक महान शीर्षक है! – Mnebuerquo