मुखौटा, प्रॉक्सी, एडाप्टर और डेकोरेटर डिज़ाइन पैटर्न के बीच अंतर क्या है?
मैंने कभी स्पष्ट स्पष्टीकरण नहीं पढ़ा, आपका क्या है?
मुखौटा, प्रॉक्सी, एडाप्टर और डेकोरेटर डिज़ाइन पैटर्न के बीच अंतर क्या है?
मैंने कभी स्पष्ट स्पष्टीकरण नहीं पढ़ा, आपका क्या है?
जवाबों:
एडॉप्टर एक दिए गए वर्ग / वस्तु को एक नए इंटरफ़ेस के लिए एडाप्ट करता है। पूर्व के मामले में, बहु उत्तराधिकार आमतौर पर नियोजित होता है। बाद के मामले में, ऑब्जेक्ट को एक अनुरूप एडाप्टर ऑब्जेक्ट द्वारा लपेटा जाता है और चारों ओर से गुजरता है। हम यहां जो समस्या हल कर रहे हैं, वह गैर-संगत इंटरफेस है ।
मुखौटा कार्यक्षमता के एक जटिल सेट के लिए एक साधारण प्रवेश द्वार की तरह है। आप अपने ग्राहकों को कम चिंता करने के लिए एक ब्लैक-बॉक्स बनाते हैं और इंटरफेस को सरल बनाते हैं ।
प्रॉक्सी प्रॉक्सी-क्लास के लिए समान इंटरफ़ेस प्रदान करता है और आम तौर पर कुछ हाउसकीपिंग सामान अपने आप करता है। (इसलिए एक भारी वस्तु की कई प्रतियां बनाने के बजाय X
आप एक हल्के प्रॉक्सी की प्रतियां बनाते हैं P
जो बदले में X
आपकी कॉल का प्रबंधन करता है और आवश्यकतानुसार अनुवाद करता है।) आप क्लाइंट की समस्या को एक भारी और / या जटिल वस्तु का प्रबंधन करने से हल कर रहे हैं ।
डेकोरेटर का उपयोग आपकी वस्तुओं में अधिक बारूद को जोड़ने के लिए किया जाता है (शब्द वस्तुओं पर ध्यान दें - आप आमतौर पर वस्तुओं को गतिशील रूप से रनटाइम पर सजाते हैं)। आप ऑब्जेक्ट के मौजूदा इंटरफेस को छिपाते / बिगाड़ते नहीं हैं बल्कि इसे रनटाइम में बढ़ाते हैं ।
अब जब आपने डेकोरेटर को शामिल किया है, तो आप शायद जानना चाहेंगे कि शब्द वस्तु पर जोर क्यों दिया जाता है - कुछ भाषाएं (जैसे जावा) बस वर्चुअल इनहेरिटेंस (यानी सी ++ के रूप में कई विरासत) की अनुमति नहीं देती हैं ताकि आप इसे पूरा कर सकें। संकलन समय।
चूंकि हमने कई विरासतों (और खूंखार हीरे) में घसीटा है, आप मिश्रणों के लिए बाहर देखेंगे - जिन्हें कई वंशानुक्रमों की समस्याओं के आसपास पाने के लिए इंटरफेस के रैखिक श्रृंखलन का आदेश दिया गया है । हालांकि, मिश्रण अच्छी तरह से मिश्रण नहीं है। और हम लक्षण के साथ समाप्त होते हैं - हाँ व्यवहार के उन स्टेटलेस थोड़ा बूँदें जो आप सी-++ में टेम्पलेट मापदंडों में हर समय पॉप-अप देखते हैं। लक्षण रचना के मुद्दों और व्यवहार के विघटन को एक सुरुचिपूर्ण तरीके से संबोधित करने का प्रयास करते हैं, जबकि या तो कई विरासतों के लिए नहीं जाते हैं या पीछा करने का आदेश देते हैं।
मुखौटा
उदाहरण के लिए, एपीआई को आसान बनाने के लिए आप एक मुखौटा का उपयोग कर सकते हैं। एक दूरस्थ मुखौटा के इस उदाहरण पर एक नज़र डालें । यहां विचार यह है कि सर्वर पर कोड का पूर्ण कार्यान्वयन क्लाइंट से छिपा हुआ है। क्लाइंट 1 एपीआई विधि को कॉल करता है, जो बदले में, सर्वर पर 1 या अधिक एपीआई कॉल कर सकता है।
अनुकूलक
इसका एक अच्छा उदाहरण विकिपीडिया पर यहाँ देखा जा सकता है । एक क्लाइंट ऑब्जेक्ट Source
किसी अन्य ऑब्जेक्ट पर एक विधि को कॉल करना चाहेगा Target
, लेकिन उस अन्य ऑब्जेक्ट का इंटरफ़ेस अलग है जो क्लाइंट की अपेक्षा कर रहा है।
एडॉप्टर ऑब्जेक्ट दर्ज करें।
यह Source
ऑब्जेक्ट से कॉल ले सकता है और, पर्दे के पीछे, उस Target
विधि को कॉल करें जिसका उपयोग किया जाना चाहिए।
Source->CallMethodAOnTarget() ---< Adaptor.CallMethodAOnTarget() this calls ---> Target.MethodWithDifferentSignatureAndName(int i)
प्रॉक्सी के रूप में, मुझे इस डिज़ाइन पैटर्न का कोई अनुभव नहीं है।