2010-06-01 3 views
6

मैंने अभी Observable, Observer के साथ खेलना शुरू कर दिया है और यह update() विधि है और मैं समझ नहीं पा रहा हूं कि विभिन्न कार्यों को notifyObservers() पर कॉल करने पर मुझे क्या करना चाहिए।जावा में ऑब्जर्वर के अपडेट() के भीतर विभिन्न परिचालन कैसे करें?

मेरा मतलब है, मेरी Observable वर्ग कुछ अलग तरीकों कि अंत में setChanged() और notifyObservers() फोन है। बुलाए गए विधि के आधार पर, यूआई (स्विंग) के कुछ हिस्से को अद्यतन करने की आवश्यकता है। हालांकि, वहाँ केवल एक ही update() विधि Observer वर्ग में लागू है।

हालांकि notifyObservers() विधि के लिए कुछ गुजर और फिर मैं update() पर तर्क जांच कर सकते हैं, लेकिन यह यह करने के लिए एक अच्छा तरीका का मन नहीं करता की मैं। यहां तक ​​कि अगर ऐसा हुआ, तो मुझे क्या पास करना चाहिए? कार्रवाई/विधि के संक्षिप्त वर्णन के साथ एक स्ट्रिंग? एक int, एक एक्शन/विधि कोड की तरह? कुछ और?

इस स्थिति को संभालने का सबसे अच्छा तरीका क्या है?

उत्तर

7

सामान्य रूप से आपको अपडेट करने के लिए कॉल प्राप्त होने पर सभी को देखने योग्य से अपडेट करना चाहिए()। यदि यह व्यावहारिक नहीं है, तो आप ऑब्सर्वर() को सूचित करने के लिए संकेत भेज सकते हैं।

गिरोह की पुस्तक का कहना है कि पर्यवेक्षक पैटर्न के परिणामों में से एक है:।

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

यह समस्या तथ्य यह है कि सरल अद्यतन प्रोटोकॉल क्या इस विषय में बदल पर कोई विवरण प्रदान करता है। अतिरिक्त प्रोटोकॉल टी के बिना द्वारा बिगड़ जाती है o पर्यवेक्षकों को पता चलता है कि क्या बदल गया है, उन्हें परिवर्तनों को कम करने के लिए कड़ी मेहनत करने के लिए मजबूर किया जा सकता है। " कार्यान्वयन के तहत भी, वे कहते हैं:

" पर्यवेक्षक-विशिष्ट अद्यतन प्रोटोकॉल से बचें: पुश और पुल मॉडल। पर्यवेक्षक पैटर्न के कार्यान्वयन में अक्सर इस विषय के बारे में अतिरिक्त जानकारी प्रसारित होती है। विषय इस जानकारी को अपडेट करने के लिए तर्क के रूप में पास करता है। जानकारी की मात्रा व्यापक रूप से भिन्न हो सकती है।

एक चरम पर है, जो हम धक्का मॉडल कहते हैं, विषय परिवर्तन के बारे में पर्यवेक्षकों भेजता विस्तृत जानकारी, चाहे वे यह चाहते हैं या नहीं। दूसरी चरम पर पुल मॉडल है; विषय सबसे कम अधिसूचना के अलावा कुछ भी नहीं भेजता है, और पर्यवेक्षक इसके बाद स्पष्ट रूप से विवरण मांगते हैं।

पुल मॉडल, अपने पर्यवेक्षकों का विषय की अज्ञानता पर जोर देती है, जबकि धक्का मॉडल मानता विषयों उनके पर्यवेक्षकों की जरूरतों के बारे में कुछ पता है। पुश मॉडल पर्यवेक्षकों को कम पुन: प्रयोज्य बना सकता है, क्योंकि विषय वर्ग पर्यवेक्षक वर्गों के बारे में धारणाएं बनाते हैं जो हमेशा सत्य नहीं हो सकते हैं। दूसरी तरफ, पुल मॉडल अक्षम हो सकता है, क्योंकि ऑब्जर्वर कक्षाओं को पता होना चाहिए कि विषय से मदद के बिना क्या बदला गया है। "

3

update() से पीछे नहीं पैरामीटर प्रकार Object की है, तो आप कुछ भी उचित पारित कर सकते हैं। जैसा कि आप ध्यान देते हैं, दृष्टिकोण सामान्य है। इसके विपरीत, एक वर्ग है कि एक EventListenerList का कहना है जब निर्दिष्ट के रूप में इस्तेमाल रन-टाइम प्रकार सुरक्षा की एक डिग्री प्राप्त कर सकते हैं।

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