2009-08-03 17 views

उत्तर

20

रणनीति पैटर्न एक सामान्य सॉफ़्टवेयर समस्या का एक बहुत ही विशिष्ट डिज़ाइन समाधान है। रणनीति पैटर्न का तात्पर्य है कि वहाँ हो जाएगा

  • एक अंतरफलक रणनीति (या रणनीति के साथ नाम के हिस्से के रूप में) कहा जाता है। इस इंटरफेस में execute() नामक एक विधि होनी चाहिए।
  • एक या अधिक ठोस वर्गों को कंक्रीटस्ट्रेटीए, कंक्रीटस्ट्रेटीबी आदि जैसे कुछ कहा जाता है जो रणनीति इंटरफेस को लागू करते हैं।
  • वहाँ भी एक संदर्भ वर्ग में शामिल है कि रणनीति

प्रतिनिधिमंडल अधिक एक पैटर्न की तुलना में एक प्रमुख है होना चाहिए। प्रतिनिधिमंडल का तात्पर्य है कि एक वस्तु होने के बजाय सबकुछ का प्रभारी होना, यह अन्य वस्तुओं को जिम्मेदारियों का प्रतिनिधित्व करता है। कारण यह एक आम तकनीक है कि यह युग्मन को कम करने और समेकन में वृद्धि करके सॉफ्टवेयर विकास के दो और अधिक मौलिक प्रधानाचार्यों को लागू करता है।

यह सब कहकर, पैटर्न के बारे में चिंता न करें। प्रधानाचार्यों पर ध्यान केंद्रित करें और यदि आपको लगता है कि आपका समाधान बेहतर हो सकता है - यह देखने के लिए पैटर्न देखें कि क्या कोई बेहतर मूसट्रैप है या नहीं। आप प्रिंसिपलों के बजाय पैटर्न पर ध्यान केंद्रित करते हैं, तो आप अपने आप को सभी पैटर्न में खो दिया है और लागू करने पैटर्न की खातिर लागू करने पैटर्न हो रही मिल जाएगा ...

+0

प्रतिनिधिमंडल पैटर्न निर्भरता इंजेक्शन के समान ही है? – sivabudh

+0

@ शाहरिस 23: नहीं। निर्भरता इंजेक्शन निर्भरताओं की हार्डकोडिंग को हटा देता है, और उन निर्भरताओं के वैकल्पिक कार्यान्वयन को अनुमति देता है (या तो रनटाइम या संकलन समय पर)। निर्भरता का उपयोग करने वाली कक्षा निर्भरता बनाने के लिए ज़िम्मेदार नहीं है: इसे बाहर से "इंजेक्शन" दिया जाता है। प्रतिनिधिमंडल पैटर्न सिर्फ अन्य वस्तुओं के लिए काम करता है। वे वस्तुएं "निर्भरता" हो सकती हैं या नहीं भी हो सकती हैं, और वे बाहर से इंजेक्शन नहीं कर सकते हैं या नहीं। –

10

"प्रतिनिधिमंडल" वास्तव में एक डिज़ाइन-पैटर्न नहीं है, यह एक सामान्य प्रोग्रामिंग तकनीक है, जहां घटक ए घटक को कार्य करता है (जो भी कार्य हो सकता है) घटक बी। कई संदर्भों में प्रतिनिधि का उपयोग किया जा सकता है ।

दूसरी ओर, रणनीति पैटर्न एक विशिष्ट पैटर्न है जो आम तौर पर एक कार्यान्वयन विस्तार के रूप में प्रतिनिधिमंडल का भारी उपयोग करता है।

उदाहरण के लिए, आप रणनीति पैटर्न को लागू करने और

strategy.execute(x) 

रणनीति पैटर्न अपने रणनीति इंटरफेस के विभिन्न कार्यान्वयन होने शामिल है, और रनटाइम पर उचित कार्यान्वयन के चयन का उपयोग कर इसे आह्वान हो सकता है। कार्यान्वयन का आह्वान करने का कार्य प्रतिनिधिमंडल है।

तो यह या तो नहीं है, या अवधारणाएं मानार्थ हैं।

+1

मुझे पता है कि रणनीति पद्धति का उपयोग कर काम करता है अभी भी डिजाइन पैटर्न मार्ग का उपयोग कर दिए गए के लाभों पर अपने विचार मुझे देने के लिए के लिए इस पृष्ठ पाया शिष्ठ मंडल। विकिपीडिया एक दूसरे के संदर्भ के बिना दोनों प्रतिनिधिमंडल पैटर्न और रणनीति पैटर्न को परिभाषित करता है। जिसने मुझे आश्चर्यचकित कर दिया कि क्या वे अपने इरादे में भिन्न हैं। http://en.wikipedia.org/wiki/Strategy_pattern http://en.wikipedia.org/wiki/Delegation_pattern धन्यवाद। – hIpPy

+0

आप प्रतिनिधिमंडल की तुलना में रणनीति को उच्च स्तर (या यहां तक ​​कि अधिक वजन) होने पर विचार कर सकते हैं। इसके अलावा, प्रतिनिधि शायद अधिक आम है। – skaffman

+1

विकिपीडिया में प्रतिनिधिमंडल_पटर बीएस की तरह दिखता है ... मुझे नहीं लगता कि यह एक वास्तविक पैटर्न है। यह आमतौर पर ज्ञात या स्वीकार्य पैटर्न नहीं है। एक पैटर्न का उद्देश्य यह है कि आपके कमरे में 100 डेवलपर्स हो सकते हैं और जब आप किसी विशिष्ट पैटर्न के बारे में बात करते हैं, तो डिफ़ॉल्ट कक्षाएं, संरचना, विधियां, और संबंध पहले से ही उन सभी द्वारा ज्ञात हैं। मुझे संदेह है कि आपने 100 डेवलपर्स को "प्रतिनिधिमंडल पैटर्न" का उल्लेख किया है, तो अधिकांश आपको क्विज़िकल दिखेंगे। – mson

2

यहाँ एक विचार है:

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

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

तो संक्षेप में, एक रणनीति में एक ही व्यवहार शामिल है, प्रतिनिधि व्यवहार के एक सेट को लागू करते हैं, और आप रणनीतियों को लागू करने के लिए प्रतिनिधियों का उपयोग कर सकते हैं।

0

यदि आप रणनीति पैटर्न बनाम प्रतिनिधियों के रूप में कार्य करते हैं, जैसे फंक्शंस/लैम्बडास तर्क के रूप में पारित होते हैं, तो कम से कम मुझे पता है कि कक्षाओं के संदर्भ में कम ओवरहेड है जो प्रतिनिधियों के लिए संकलित करने की आवश्यकता है।

मैं वास्तव में देखने वाले व्यक्ति है कि दोनों जावा 8 और सी # अब तर्क के रूप में कार्य गुजर समर्थन

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

  • कोई संबंधित समस्या नहीं^_^