2008-10-23 19 views
11

जब मैंने पहली बार रणनीति पैटर्न की खोज की, तो मुझे लगता है कि यह मुझे और मेरे कार्यक्रमों की पेशकश की जाने वाली असीमित संभावनाओं से हैरान था। मैं अपने मॉडल के व्यवहार को बेहतर ढंग से समाहित कर सकता हूं और इस व्यवहार को फ्लाई पर भी बदल सकता हूं। लेकिन रणनीति का उपयोग उस वस्तु को गुण और पेलोड प्रदान करने के लिए भी किया जा सकता है - डेटा जो सुपरक्लास में घोषित किया गया था। जीवन ठीक था।नीति के खिलाफ रणनीति और रणनीति के खिलाफ नीति

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(); } 
}; 

दोनों पैटर्न मेरे लिए बहुत शक्तिशाली प्रतीत होते हैं और मैं अलग-अलग परिस्थितियों में दोनों का उपयोग करना पसंद करता हूं। लेकिन मुझे यकीन नहीं है कि कुछ परिस्थितियों में या तो विशेष/विशिष्ट/अधिक व्यावहारिक अनुप्रयोग हैं।

मुझे आश्चर्य है: आप रणनीतियों और कहां नीतियों का उपयोग करते हैं? या तो बेहतर अनुकूल कहां हैं?

+1

आपका पोस्ट काफी कारण है कि मैं सी ++ – Mecki

+0

नफरत का सार है लेकिन यह एक महान शीर्षक है! – Mnebuerquo

उत्तर

21

नीतियां बड़े पैमाने पर संकलित समय पर सेट की जाती हैं, जबकि रणनीतियों को रनटाइम पर सेट किया जाता है। इसके अलावा, नीतियां आम तौर पर एक सी ++ अवधारणा होती हैं, और केवल अन्य भाषाओं की अल्पसंख्यक (उदाहरण के लिए डी) पर लागू होती हैं, जबकि रणनीति पैटर्न कई (अधिकांश?) ऑब्जेक्ट उन्मुख भाषाओं के लिए उपलब्ध है, और ऐसी भाषाएं जो पहले श्रेणी के नागरिकों जैसे पायथन जैसे कार्यों का इलाज करती हैं ।

कहा जा रहा है:

  • एक नीति, संकलन समय पर निर्धारित किया जा रहा है, आम तौर विशेष स्थितियों में, जहां आप एक प्रति-द्विआधारी आधार पर अलग अलग आवेदन तर्क चाहते हैं के लिए ही उपयोगी है। उदाहरण के लिए आप ऐसे सॉफ्टवेयर विकसित कर सकते हैं जो प्रत्येक ग्राहक के लिए थोड़ा अनुकूलित हो, चाहे वेब इंटरफ़ेस के माध्यम से हों या हाथ से, यह नीति-आधारित पैटर्न होगा।

  • एक रणनीति रनटाइम पर निर्धारित की जाती है, और वास्तव में फ्लाई पर बदला जा सकता है। उदाहरण के लिए आपके पास सॉफ़्टवेयर हो सकता है जो समर्थन समूह के मुकाबले बिक्री बल के लिए एक अलग उपयोगकर्ता इंटरफ़ेस और तर्क लागू करता है, लेकिन उन्हें दो अलग-अलग बनाए रखने वाले ऐप्स रखने के बजाय एक ही ग्राहक और लाइसेंसिंग जानकारी से निपटना होगा, जिनके पास आपके पास केवल एक ऐप है आवश्यकतानुसार अंतरफलक परिवर्तन।

-Adam

4

मैंने सोचा कि वे same thing थे।

+0

यह मेरी पहली प्रतिक्रिया भी थी। –

+0

की तरह http://en.wikipedia.org/wiki/Policy-based_design –

संबंधित मुद्दे