मेरा विषय पर ले।
सभी चार पैटर्न में बहुत कुछ है, सभी चार को कभी-कभी अनौपचारिक रूप से रैपर या आवरण पैटर्न कहा जाता है। सभी रचना का उपयोग करते हैं, विषय को लपेटते हैं और किसी बिंदु पर विषय को निष्पादन सौंपते हैं, एक विधि कॉलिंग को दूसरे से मैप करते हैं। वे क्लाइंट को एक अलग ऑब्जेक्ट बनाने और सभी प्रासंगिक डेटा की प्रतिलिपि बनाने की आवश्यकता को छोड़ देते हैं। यदि बुद्धिमानी से उपयोग किया जाता है, तो वे मेमोरी और प्रोसेसर को बचाते हैं।
ढीले कपलिंग को बढ़ावा देने से वे अपरिहार्य परिवर्तनों के साथ एक बार स्थिर कोड को कम कर देते हैं और साथी डेवलपर्स के लिए बेहतर पठनीय बन जाते हैं।
अनुकूलक
एडॉप्टर एक अलग इंटरफ़ेस के लिए विषय (एडेप्टी) को एडाप्ट करता है। इस तरह हम ऑब्जेक्ट को नाममात्र के विभिन्न प्रकारों के संग्रह में रख सकते हैं।
एडॉप्टर क्लाइंट के लिए केवल प्रासंगिक तरीकों को उजागर करता है, अन्य सभी को प्रतिबंधित कर सकता है, विशेष संदर्भों के लिए उपयोग के इरादों को प्रकट करता है, जैसे बाहरी लाइब्रेरी को एडॉप्ट करना, यह हमारे आवेदन की जरूरतों पर कम सामान्य और अधिक केंद्रित दिखाई देता है। एडेप्टर हमारे कोड की पठनीयता और आत्म वर्णन बढ़ाते हैं।
एडेप्टर अन्य टीमों के अस्थिर कोड से एक टीम को ढालते हैं; अपतटीय टीमों के साथ काम करते समय एक जीवन रक्षक उपकरण ;-)
कम उल्लेखित उद्देश्य यह एनोटेशन की अधिकता से विषय वर्ग को रोकने के लिए है। एनोटेशन के आधार पर इतने सारे ढांचे के साथ यह अधिक महत्वपूर्ण उपयोग हो जाता है।
एडाप्टर केवल एकल वंशानुक्रम के जावा सीमा के आसपास प्राप्त करने में मदद करता है। यह एक लिफाफे के तहत कई विशेषणों को संयोजित कर सकता है जो कई उत्तराधिकार की छाप देता है।
कोड वार, एडेप्टर "पतला" है। यह एडेप्टरी क्लास में बहुत अधिक कोड नहीं जोड़ना चाहिए, इसके अलावा केवल एडेपेटी विधि और सामयिक डेटा रूपांतरणों को कॉल करने के लिए आवश्यक है।
JDK या बुनियादी पुस्तकालयों में कई अच्छे एडेप्टर उदाहरण नहीं हैं। अनुप्रयोग डेवलपर्स विशिष्ट इंटरफेस को लागू करने के लिए पुस्तकालयों को अनुकूलित करने के लिए, एडेप्टर बनाते हैं।
डेकोरेटर
डेकोरेटर न केवल डेलिगेट करता है, न केवल एक विधि को दूसरे में मैप करता है, वे अधिक करते हैं, वे कुछ विषय विधियों के व्यवहार को संशोधित करते हैं, यह बिल्कुल भी विषय पद्धति को कॉल नहीं कर सकता है, एक अलग ऑब्जेक्ट, एक हेल्पर ऑब्जेक्ट को सौंप सकता है।
सज्जाकार आम तौर पर लिपटे हुए, एन्क्रिप्शन, स्वरूपण, या विषय के लिए संपीड़न जैसे लिपटे ऑब्जेक्ट में कार्यक्षमता (पारदर्शी) जोड़ते हैं। यह नई कार्यक्षमता बहुत सारे नए कोड ला सकती है। इसलिए, सज्जाकार आम तौर पर बहुत "मोटी" होते हैं, फिर एडेप्टर।
डेकोरेटर को विषय के इंटरफ़ेस का एक उप-वर्ग होना चाहिए। इसका उपयोग इसके विषयों के बजाय पारदर्शी रूप से किया जा सकता है। BufferedOutputStream देखें, यह अभी भी OutputStream है और इसे इस तरह इस्तेमाल किया जा सकता है। यह एडेप्टर से एक प्रमुख तकनीकी अंतर है।
पूरे डेकोरेटर्स परिवार की पाठ्य पुस्तक के उदाहरण JDK - Java IO में आसानी से हैं। सभी वर्ग जैसे BufferedOutputStream , FilterOutputStream और ObjectOutputStream , OutputStream के डेकोरेटर हैं । वे प्याज स्तरित हो सकते हैं, जहां एक से एक डेकोरेटर को फिर से सजाया जाता है, और अधिक कार्यक्षमता जोड़ते हैं।
प्रतिनिधि
प्रॉक्सी एक सामान्य आवरण नहीं है। लिपटे ऑब्जेक्ट, प्रॉक्सी विषय, प्रॉक्सी निर्माण के समय अभी तक मौजूद नहीं हो सकता है। प्रॉक्सी अक्सर इसे आंतरिक रूप से बनाता है। यह मांग पर बनाई गई एक भारी वस्तु हो सकती है, या यह अलग-अलग JVM या अलग-अलग नेटवर्क नोड में दूरस्थ वस्तु और यहां तक कि गैर-जावा ऑब्जेक्ट, मूल कोड में एक घटक है। इसमें किसी अन्य वस्तु को आवश्यक रूप से लपेटना या उसे सौंपना नहीं है।
अधिकांश विशिष्ट उदाहरण दूरस्थ प्रॉक्सी, भारी वस्तु आरंभीकरण और पहुँच प्रॉक्सी हैं।
रिमोट प्रॉक्सी - विषय रिमोट सर्वर, विभिन्न JVM या यहां तक कि गैर जावा सिस्टम पर है। प्रॉक्सी RMI / REST / SOAP कॉल या जो कुछ भी आवश्यक है, को कॉल करता है, क्लाइंट को अंतर्निहित तकनीक के संपर्क में आने से बचाता है।
आलसी लोड प्रॉक्सी - पूरी तरह से ऑब्जेक्ट को केवल पहले उपयोग या पहले गहन उपयोग को प्रारंभ करें।
पहुंच प्रॉक्सी - विषय के लिए नियंत्रण पहुंच।
मुखौटा
मुखौटा डिजाइन ऑफ लीस्ट नॉलेज (लॉ ऑफ डेमेटर) के डिजाइन सिद्धांत के साथ निकटता से जुड़ा हुआ है। मुखौटा एडेप्टर के समान है। वे दोनों लपेटते हैं, वे दोनों एक वस्तु को दूसरे से जोड़ते हैं, लेकिन वे इरादे में भिन्न होते हैं। मुखौटा एक विषय, जटिल वस्तु ग्राफ की जटिल संरचना को समतल करता है, एक जटिल संरचना तक पहुंच को सरल करता है।
मुखौटा एक जटिल संरचना को लपेटता है, यह एक सपाट इंटरफ़ेस प्रदान करता है। यह क्लाइंट ऑब्जेक्ट को विषय संरचना में आंतरिक संबंधों के संपर्क में आने से रोकता है इसलिए ढीली युग्मन को बढ़ावा देता है।
पुल
एडेप्टर पैटर्न का अधिक जटिल संस्करण जहां न केवल कार्यान्वयन भिन्न होता है, बल्कि अमूर्त भी होता है। यह प्रतिनिधिमंडल के लिए एक और अप्रत्यक्ष जोड़ता है। अतिरिक्त प्रतिनिधिमंडल पुल है। यह अडैप्टर इंटरफेस से भी एडॉप्टर को डिकॉय करता है। यह अन्य रैपिंग पैटर्नों की तुलना में जटिलता को बढ़ाता है, इसलिए देखभाल के साथ लागू करें।
कंस्ट्रक्टरों में अंतर
अपने कंस्ट्रक्टरों को देखते समय पैटर्न के अंतर भी स्पष्ट होते हैं।
प्रॉक्सी किसी मौजूदा ऑब्जेक्ट को नहीं लपेट रहा है। कंस्ट्रक्टर में कोई विषय नहीं है।
डेकोरेटर और एडाप्टर रैप पहले से ही विद्यमान वस्तु है और इसलिए इसे आम तौर पर किया जाता है
निर्माता में प्रदान की है।
मुखौटा निर्माता पूरे ऑब्जेक्ट ग्राफ का मूल तत्व लेता है, अन्यथा यह एडेप्टर के समान दिखता है।
वास्तविक जीवन उदाहरण - JAXB मार्शल एडॉप्टर । इस एडॉप्टर का उद्देश्य एक साधारण फ्लैट क्लास को अधिक जटिल संरचना की आवश्यकता है जो बाहरी रूप से आवश्यक है और अत्यधिक एनोटेशन वाले "प्रदूषणकारी" विषय वर्ग को रोकने के लिए है।