क्या संदर्भ विरासत, जैसा कि हेड फर्स्ट डिज़ाइन पैटर्न के डक उदाहरण द्वारा दिखाया गया है, रणनीति पैटर्न के लिए अप्रासंगिक है?


10

में हेड फर्स्ट डिजाइन पैटर्न यह सिखाता रणनीति पैटर्न एक बतख उदाहरण है जहाँ बतख के विभिन्न उपवर्गों रनटाइम पर एक विशेष व्यवहार सौंपा जा सकता है का उपयोग करके। मेरी समझ से रणनीति पैटर्न का उद्देश्य रनटाइम के दौरान किसी एक ऑब्जेक्ट के व्यवहार को बदलना है, फिर भी वे विभिन्न प्रकार के डक के व्यवहार को बदलने के लिए डक की विरासत का उपयोग कर रहे हैं।

रणनीति पैटर्न

प्रासंगिकता?

क्या संदर्भ पैटर्न का संदर्भ वंशानुक्रम रणनीति पैटर्न के लिए अप्रासंगिक है या बतख प्रकार भिन्न हो रहे हैं और रणनीति व्यवहार को नियोजित करने के लिए उनके व्यवहार को भी एक अच्छा कारण बता रहे हैं? क्या ऐसी परिस्थितियाँ जहाँ आपको दोनों को अलग-अलग करने की आवश्यकता है, रणनीति पैटर्न का उपयोग करने का एक अच्छा कारण है? वे इसे रणनीति पैटर्न उदाहरण के रूप में क्यों शामिल करेंगे?

एक सरल उदाहरण

क्या मैं केवल एक बतख वर्ग (कोई व्युत्पन्न वर्ग) करके इस उदाहरण को और सरल बना सकता हूँ? तब एक बतख ऑब्जेक्ट को लागू करते समय इसे कुछ परिस्थितियों के आधार पर अलग-अलग व्यवहार सौंपा जा सकता है जो अपने स्वयं के ऑब्जेक्ट प्रकार पर निर्भर नहीं होते हैं। उदाहरण के लिए: फ्लाईबहेवियर मौसम के आधार पर बदलता है या क्वैकबेहोर दिन के समय के आधार पर बदलता है या एक भूखा कैसे होता है। मुझे लगता है कि यह पुस्तक में से एक से एक अलग समस्या का समाधान होगा, लेकिन मैं जो देख रहा हूं वह एक प्रासंगिक रणनीति पैटर्न उदाहरण है जिस पर गिरना है।

क्या ऊपर दिया गया मेरा उदाहरण रणनीति पैटर्न का भी गठन करेगा?

संपादित करें:

मैं 2 सरल रणनीति पैटर्न उदाहरणों को खोजने में सफल रहा, जो संदर्भ विरासत के बिना सिर्फ रणनीति पैटर्न होने के लिए अधिक कड़ाई से पालन करते हैं: हंटर.जवा और सॉल्वरहोम

जवाबों:


7

हां, मुझे लगता है कि आप सही रास्ते पर हैं। रणनीति पैटर्न का उपयोग करने वाले वर्ग को उपवर्ग नहीं होना चाहिए। रणनीति पैटर्न कोड पुन: उपयोग के लिए विरासत का एक विकल्प है। यह उत्तराधिकार बनाम रचना की व्यापक तुलना में वापस आता है।

से डिजाइन पैटर्न: पुन: प्रयोज्य OOP के तत्वों आप के लिए रणनीति पैटर्न का प्रयोग करेंगे

  • उपवर्गों के विस्फोट से बचें (व्यवहारों के संयोजन के कारण)
  • यदि आपको रन-टाइम पर व्यवहार को बदलने की आवश्यकता है

यदि आपने क्वैक और फ्लाई व्यवहार को लागू करने के लिए विरासत का उपयोग किया है तो आप इन सभी उपवर्गों के साथ व्यवहार के सभी संयोजनों का प्रतिनिधित्व करेंगे।

  • FlyableQuackableDuck
  • FlyableSqeakableDuck
  • FlyableMuteDuck
  • NoFlyQuackableDuck
  • NoFlySqueakableDuck
  • NoFlyMuteDuck

इतने सारे उपवर्ग होने के कारण इसे बनाए रखना कठिन हो जाता है यही कारण है कि इस मामले में रणनीति पैटर्न का पक्ष लिया जाता है। आपको बस दो गुणों की आवश्यकता होती है जो फ्लाईएबिलिटी और क्वैकेबिलिटी को एनकैप्सुलेट करते हैं और आप नई कक्षाएं बनाए बिना इनका मिश्रण और मिलान कर सकते हैं।

आपने पहले से ही रन-टाइम के लाभ का उल्लेख किया है यदि मौसम ने बतख की मक्खी की संपत्ति को शर्तों के कारण नोफ़ली ऑब्जेक्ट से बदला जा सकता है।

यह संभव होने पर विरासत पर रचना का पक्ष लेने की सलाह के अनुरूप है।


1

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

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

सार कारखाना - निर्माण आधारित निर्माण

यहाँ पैटर्न है । BTW, ध्यान दें कि यह स्वयं रणनीति का उपयोग करता है।

अवधारणा पर ध्यान केंद्रित करते हुए, कार्यान्वयन नहीं ... आपके पास एक "वेदरफैक्टरी" हो सकती है जो धूप या बरसात, आदि स्थितियों के आधार पर विनिर्देशन वस्तुओं का निर्माण करती है।

उन "NoFlyInFogQuackableMallard" चीज़ों का निर्माण करने के लिए आपके पास "कारखानों के कारखाने" हो सकते हैं। और वास्तव में, यही सार फैक्ट्री पैटर्न के बारे में है। तो शायद सामान्य बतख-प्रकार बनाने के लिए एक डकफैक्टरी, फिर इसे एक बतख-प्रकार-विशिष्ट-धूमिल मौसम व्यवहार देने के लिए एक वेदरफैक्टरी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.