2011-06-11 9 views
5

नियो 4 जे स्रोत कोड का अध्ययन करते समय मैंने देखा कि वे कार्यान्वयन से इंटरफ़ेस को डीकॉप्लिंग करने के लिए एक बहुत ही रोचक पैटर्न का उपयोग करते हैं। Node इंटरफ़ेस है जो केवल NodeProxy कक्षा द्वारा लागू किया गया है। बदले में नोडप्रोक्सी NodeImpl पर प्रतिनिधि है जो आपको लगता है कि नोड भी लागू करता है, लेकिन यह नहीं करता है। नोडइम्प्ल में एक ही हस्ताक्षर के साथ एक ही तरीके हैं और नोड का समर्थन कार्यान्वयन है, लेकिन यह नोड को लागू नहीं करता है। मैंने पहले प्रॉक्सी पैटर्न का उपयोग किया है लेकिन नोड इंपल को नोड को लागू करने के लिए नोडप्रोक्सी करता है। इस पैटर्न के फायदे के बारे में कोई विचार?दिलचस्प API पैटर्न

संपादित करें 1: सर्केल की टिप्पणी के लिए धन्यवाद अब मुझे पता है कि Bridge pattern कहा जाता है और मुख्य उद्देश्य "इसके कार्यान्वयन से एक अमूर्तता को कम करना है ताकि दोनों स्वतंत्र रूप से भिन्न हो सकें" दिलचस्प।

+0

'नोडप्रॉक्सी 'को' नोडइम्प्ल 'के प्रतिनिधि कैसे करता है? 'NodeProxy' किसी भी तरह से 'NodeImpl' का उपयोग नहीं करता है। यह दूसरी तरफ है - 'नोडइम्प्ल' 'नोडप्रोक्सी 'का उपयोग करता है। –

+0

यह सुनिश्चित नहीं है कि लाभ क्या हैं क्योंकि मुझे आपके द्वारा देखे जाने वाले ढांचे के बारे में बिल्कुल कुछ नहीं पता है, लेकिन ऐसा लगता है कि नोडप्रोक्सी एक प्रकार की सेवा लोकेटर की तरह काम करता है। –

+1

इसे _Bridge pattern_ –

उत्तर

1

इसका शुद्ध यह है कि यह आपको नोडइम्प्ली के साथ काम करने के बजाय सीधे नोडप्रोक्सी के माध्यम से जाने के लिए मजबूर करता है। मैं Neo4J के साथ पर्याप्त परिचित नहीं हूं कि यह संदर्भ में ऐसा करने के लिए फायदेमंद क्यों होगा। शायद NodeProxy को अतिरिक्त व्यवहार के साथ वाद्य किया जाता है जो NodeImpl के पास नहीं है।

0

इस कार्यान्वयन का मुख्य प्रभाव यह होगा कि निर्भरताओं को वापस कर दिया जाएगा। यदि आप NodeImpl को नोड को लागू करने देते हैं, तो NodeImpl नोड पर निर्भर करेगा। नोडप्रोक्सी को पेश करके आप नोडपीक्सी को नोडइम्प्ल पर निर्भर करते हैं जबकि नोडइम्प्ल कुछ भी निर्भर नहीं करता है। यह एक विशिष्ट संदर्भ में किसी कारण से संभवतः एक लाभ या उत्तराधिकारी हो सकता है।

+0

निश्चित रूप से लेकिन नोडप्रोक्सी नोड पर भी निर्भर करता है, इसलिए नोड के एक ऑब्जेक्ट पर निर्भर होने के बजाय, अब हमारे पास नोडइम्प्ल और नोड पर एक ऑब्जेक्ट निर्भर है और एक नोड पर निर्भर है - लाभ देखने के लिए मुश्किल है, लेकिन शायद उन्हें कुछ के आसपास काम करना है अजीब सीमाएं/आवश्यकताएं जिन्हें हम नहीं जानते हैं – Voo

2

यदि आप NodeImpl पर थोड़ा और विस्तृत विवरण देखते हैं, तो आप देखते हैं कि Node विधियों के अनुरूप विधियों के अलग-अलग हस्ताक्षर हैं - वे अतिरिक्त रूप से NodeManager तर्क लेते हैं।

यह अकेले उनके लिए नोड इंटरफ़ेस को कार्यान्वित करना असंभव बनाता है।

नोडप्रोक्सी तब नोडमेनगर के संदर्भ को बनाए रखता है, जो उसके बाद नोडइम्प्ल ऑब्जेक्ट्स को पास कर सकता है।

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