2010-07-12 23 views
6

मैं यह तय नहीं कर सकता कि कौन सी पैटर्न निम्न समस्या के लिए सबसे उपयुक्त है।उपयोग करने के लिए सर्वश्रेष्ठ डिज़ाइन पैटर्न: एडाप्टर या मुखौटा

मेरे पास एक क्लाइंट सिस्टम है जो एक अलग उपप्रणाली के साथ बातचीत करेगा। उपप्रणाली काफी जटिल है और इसलिए मुझे क्लाइंट सिस्टम को सरल बनाने के लिए दोनों के बीच एक इंटरफ़ेस चाहिए। यह फेकाडे पैटर्न के लिए एकदम सही फिट की तरह लगता है लेकिन मुझे लगता है कि एडाप्टर पैटर्न भी मेरी समस्या के लिए फिट बैठता है।

क्या इससे कोई फर्क पड़ता है यदि मध्य में इंटरफ़ेस सरल API कॉल के माध्यम से उपप्रणाली पर व्यक्तिगत कार्यों को कॉल करता है?

उत्तर

9

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

6

यह स्पष्ट रूप से एक फेकाडे पैटर्न केस प्रतीत होता है, आपका लक्ष्य वास्तविक अनुकूलन के बजाय सरलीकरण है।

बहाना परिभाषा:

एक उपतंत्र में इंटरफेस का एक सेट लिए एक एकीकृत इंटरफेस प्रदान करें। Façade एक उच्च स्तरीय इंटरफ़ेस को परिभाषित करता है जो उपप्रणाली का उपयोग करना आसान बनाता है।

एडाप्टर परिभाषा:

एक और इंटरफ़ेस ग्राहकों की उम्मीद में एक वर्ग के इंटरफ़ेस बदलें। एडाप्टर कक्षाओं को पर काम करने देता है जो अन्यथा असंगत इंटरफेस के कारण नहीं हो सकता है।

परिभाषाएँ उठाया से: http://dofactory.com/Patterns/Patterns.aspx

0

फसाड और एडाप्टर के बीच का अंतर ज्यादातर मंशा है।

यदि आप करना चाहते हैं तो इंटरफ़ेस को सरल बनाना है तो आप एक फेकाडे देख रहे हैं। यदि आप इंटरफ़ेस को एडाप्टर करना चाहते हैं ताकि इसे किसी अन्य चीज़ के रूप में उपयोग किया जा सके, तो यह एडाप्टर हो।

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

5

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

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

आपका केस ऐसा लगता है जैसे आपको एडाप्टर की तुलना में एक मुखौटा की आवश्यकता है। केवल एडाप्टर पैटर्न को कार्यान्वित करने से आपको एपीआई सरलीकरण का लाभ नहीं मिलेगा। अंत में, इससे कोई फर्क नहीं पड़ता कि आप इसे क्या कहते हैं। और ये पैटर्न अनन्य नहीं हैं। आप दोनों तरह से मिश्रण कर सकते हैं जो आपको सबसे अधिक लाभ देता है।

-3

फेकाडे इंटरफेस के साथ सौदा करता है, कार्यान्वयन नहीं। इसका उद्देश्य एक ही इंटरफ़ेस के पीछे आंतरिक जटिलता को छिपाना है जो बाहर सरल दिखाई देता है।

0

Facade पैटर्न (एक ऑब्जेक्ट जो कोड कोड के बड़े निकाय को सरलीकृत इंटरफ़ेस प्रदान करता है) आपके उपयोग के मामले के लिए उपयुक्त है।

चेकलिस्ट फसाड उपयोग करने के लिए: (लिंक किए गए विकिपीडिया लेख से)

  1. एक सरल अंतरफलक एक जटिल प्रणाली का उपयोग करने की आवश्यकता है।
  2. उपप्रणाली के अवशोषण और कार्यान्वयन कसकर युग्मित हैं।
  3. स्तरित सॉफ़्टवेयर के प्रत्येक स्तर पर एक प्रविष्टि बिंदु की आवश्यकता है।
  4. सिस्टम बहुत जटिल या समझने में मुश्किल है।

फेकाडे पर अधिक जानकारी के लिए संबंधित एसई प्रश्न।

What is Facade Design Pattern?

यहां तक ​​कि दोनों हालांकि फसाड और एडाप्टर संरचनात्मक पैटर्न हैं, आशय (samitgaur जवाब अच्छी तरह से आशय हिस्सा समझाया गया है) अलग है।

चूंकि आप एक इंटरफ़ेस को अन्य इंटरफ़ेस में परिवर्तित नहीं कर रहे हैं, एडाप्टर आपके उद्देश्य की सेवा नहीं करता है।

संबंधित एसई प्रश्न:

What is the difference between the Facade and Adapter Pattern?

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