एडाप्टर पैटर्न और प्रॉक्सी पैटर्न के बीच अंतर?


33

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

प्रॉक्सी पैटर्न अंतर यह है कि हर प्रॉक्सी आवरण वास्तविक वस्तु की कार्यक्षमता का केवल एक सुसंगत सबसेट प्रदान करता है के साथ, एक ही है। यह क्यों उपयोगी होगा, जब हम "एक उद्देश्य के लिए एक वर्ग" बनाने का प्रयास करते हैं, तो यह मेरे से परे है।

क्या मैंने इसे सही ढंग से प्राप्त किया है?

जवाबों:


55

पूरी तरह से नहीं।

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

प्रॉक्सी पैटर्न भी आवरण वर्गों का उपयोग करता है, लेकिन एक अलग उद्देश्य के लिए। प्रॉक्सी पैटर्न का उद्देश्य वास्तविक संसाधन के लिए स्टैंड-इन बनाना है। प्रॉक्सी का उपयोग करने के कारण हो सकते हैं

  • वास्तविक संसाधन दूरस्थ कंप्यूटर पर रहता है (प्रॉक्सी दूरस्थ संसाधन के साथ सहभागिता की सुविधा देता है)
  • वास्तविक संसाधन बनाने के लिए महंगा है (प्रॉक्सी सुनिश्चित करता है कि लागत तब तक खर्च नहीं होती है जब तक कि / वास्तव में आवश्यक न हो)

सबसे महत्वपूर्ण बात यह है कि एक प्रॉक्सी वास्तविक संसाधन के लिए एक ड्रॉप-इन प्रतिस्थापन प्रदान करता है यह एक स्टैंड-इन है, इसलिए इसे एक ही इंटरफ़ेस प्रदान करना होगा।


सबसे पहले, महान जवाब के लिए धन्यवाद। क्या एक प्रॉक्सी उन सभी इंटरफेसों को लागू करता है जिनकी वर्तमान ग्राहक को आवश्यकता है, या क्या यह उन सभी इंटरफेसों को लागू करता है जो वास्तविक संसाधन प्रदान करते हैं?
वोरैक

1
@ वोरैक: यह इंटरफ़ेस और आपके डिज़ाइन दर्शन की जटिलता पर निर्भर करता है। दोनों संभव हैं, लेकिन यदि इंटरफ़ेस बड़ा / जटिल है या आप YAGNI में दृढ़ता से विश्वास करते हैं, तो यह केवल उसी चीज़ को लागू करने के लिए अधिक समझ में आता है जो आपको चाहिए।
बार्ट वैन इनगेन शेनौ

तो, यह देखते हुए कि एडेप्टर पैटर्न रैपर कक्षाओं का उपयोग करता है, क्या एडेप्टर पैटर्न एक प्रॉक्सी पैटर्न है?
चंद्रमन 239

@ moonman239: नहीं, क्योंकि रैपर क्लास का उपयोग करने का इरादा अलग है। सिर्फ इसलिए कि दो पैटर्न एक वर्ग आरेख में समान दिखते हैं, इसका मतलब यह नहीं है कि वे एक दूसरे से संबंधित हैं या लागू होते हैं। पैटर्न अलग होने का एक प्रमुख कारक उनका इरादा है।
बार्ट वैन इनगेन शेनौ जूल

5

मुझे यह स्पष्टीकरण पसंद है:

प्रॉक्सी सेवा के व्यवहार को बदल देता है, लेकिन इसका इंटरफ़ेस सुरक्षित रखता है।

एडाप्टर सेवा के इंटरफ़ेस को बदलता है, लेकिन इसे व्यवहार को संरक्षित करता है।

स्रोत: https://www.netobjectives.com/PatternRepository/index.php?title=AdapterVersusProxyVersusFacadePatternComparison

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