कार्यनीति पैटर्न

कंप्यूटर प्रोग्रामिंग में, रणनीति पैटर्न (जिसे नीति पैटर्न के रूप में भी जाना जाता है) एक व्यवहारिक डिज़ाइन पैटर्न डिज़ाइन पैटर्न (कंप्यूटर विज्ञान) है जो रनटाइम पर एक कलन विधि का चयन करने में सक्षम बनाता है। किसी एकल एल्गोरिदम को सीधे लागू करने के बजाय, कोड को रन-टाइम निर्देश प्राप्त होते हैं कि एल्गोरिदम के परिवार में किसका उपयोग करना है। रणनीति एल्गोरिदम को इसका उपयोग करने वाले ग्राहकों से स्वतंत्र रूप से भिन्न होने देती है। रणनीति गामा एट अल की प्रभावशाली पुस्तक डिजाइन पैटर्न्स में शामिल पैटर्न में से एक है। जिसने लचीले और पुन: प्रयोज्य ऑब्जेक्ट-ओरिएंटेड सॉफ़्टवेयर को डिज़ाइन करने के तरीके का वर्णन करने के लिए डिज़ाइन पैटर्न का उपयोग करने की अवधारणा को लोकप्रिय बनाया। रनटाइम तक किस एल्गोरिदम का उपयोग करना है, इस निर्णय को स्थगित करने से कॉलिंग कोड अधिक लचीला और पुन: प्रयोज्य हो जाता है।

उदाहरण के लिए, एक वर्ग जो आने वाले डेटा पर सत्यापन करता है, वह डेटा के प्रकार, डेटा के स्रोत, उपयोगकर्ता की पसंद या अन्य भेदभावपूर्ण कारकों के आधार पर सत्यापन एल्गोरिदम का चयन करने के लिए रणनीति पैटर्न का उपयोग कर सकता है। ये कारक रन-टाइम तक ज्ञात नहीं होते हैं और इन्हें निष्पादित करने के लिए मौलिक रूप से भिन्न सत्यापन की आवश्यकता हो सकती है। सत्यापन एल्गोरिदम (रणनीतियाँ), जो मान्य करने वाली वस्तु से अलग से समाहित हैं, का उपयोग डुप्लिकेट कोड के बिना सिस्टम के विभिन्न क्षेत्रों (या यहां तक ​​​​कि विभिन्न प्रणालियों) में अन्य मान्य वस्तुओं द्वारा किया जा सकता है।

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

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

वर्ग आरेख




रणनीति और खुला/बंद सिद्धांत
रणनीति पैटर्न के अनुसार, किसी वर्ग का व्यवहार विरासत में नहीं मिलना चाहिए। इसके बजाय, उन्हें इंटरफ़ेस का उपयोग करके इनकैप्सुलेट किया जाना चाहिए। यह खुले/बंद सिद्धांत (ओसीपी) के अनुकूल है, जो प्रस्तावित करता है कि कक्षाएं विस्तार के लिए खुली होनी चाहिए लेकिन संशोधन के लिए बंद होनी चाहिए।

उदाहरण के तौर पर, एक कार वर्ग पर विचार करें। कार के लिए दो संभावित कार्यक्षमताएं ब्रेक और एक्सीलरेट हैं। चूंकि तेजी लाने और ब्रेक लगाने के व्यवहार मॉडलों के बीच अक्सर बदलते रहते हैं, इसलिए इन व्यवहारों को उपवर्गों में लागू करना एक सामान्य दृष्टिकोण है। इस दृष्टिकोण में महत्वपूर्ण कमियां हैं: प्रत्येक नए कार मॉडल में गति और ब्रेक व्यवहार घोषित किया जाना चाहिए। जैसे-जैसे मॉडलों की संख्या बढ़ती है, इन व्यवहारों को प्रबंधित करने का काम बहुत बढ़ जाता है और सभी मॉडलों में कोड को डुप्लिकेट करने की आवश्यकता होती है। इसके अतिरिक्त, प्रत्येक मॉडल के कोड की जांच किए बिना उसके व्यवहार की सटीक प्रकृति निर्धारित करना आसान नहीं है।

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

यह भी देखें

 * डिपेंडेंसी इंजेक्शन
 * उच्च-क्रम का कार्य
 * ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग शब्दों की सूची
 * मिश्रण
 * नीति-आधारित डिज़ाइन
 * क्लास टाइप करें
 * इकाई-घटक-प्रणाली
 * विरासत पर रचना

बाहरी संबंध

 * Strategy Pattern in UML
 * Strategy Pattern for C article
 * Refactoring: Replace Type Code with State/Strategy
 * Implementation of the Strategy pattern in JavaScript
 * Implementation of the Strategy pattern in JavaScript