बहुत ही सरल शब्दों में (क्योंकि अन्य उत्तर आपको वैसे भी सभी आधिकारिक डिज़ाइन पैटर्न का उल्लेख कर रहे हैं, इसलिए आगे के विवरणों के लिए उन्हें देखें):
यदि आप एक ऐसा वर्ग रखना चाहते हैं जिस पर आपके कार्यक्रम के पारिस्थितिक तंत्र में अन्य वर्गों द्वारा नजर रखी जाती है, तो आप कहते हैं कि आप चाहते हैं कि कक्षा अवलोकन योग्य हो। यानी इसके राज्य में कुछ बदलाव हो सकते हैं जिन्हें आप बाकी कार्यक्रम में प्रसारित करना चाहते हैं।
अब, ऐसा करने के लिए हमें किसी प्रकार की विधि को कॉल करना होगा। हम नहीं चाहते हैं कि ऑब्जर्वेबल क्लास को उन कक्षाओं के साथ कसकर जोड़ा जाए जो इसे देखने में रुचि रखते हैं। यह परवाह नहीं करता कि यह कब तक है क्योंकि यह कुछ मानदंडों को पूरा करता है। (कल्पना करें कि यह एक रेडियो स्टेशन है, यह परवाह नहीं करता कि कौन सुन रहा है जब तक कि उनकी आवृत्ति पर एक एफएम रेडियो है)। यह प्राप्त करने के लिए कि हम एक इंटरफ़ेस का उपयोग करते हैं, प्रेक्षक के रूप में जाना जाता है।
इसलिए, ऑब्जर्वेबल क्लास में ऑब्जर्वर की एक सूची होगी (यानी आपके पास जो ऑब्जर्वर इंटरफ़ेस के तरीके हैं उन्हें लागू करना होगा)। जब भी यह कुछ प्रसारित करना चाहता है, यह सिर्फ सभी पर्यवेक्षकों पर एक के बाद एक विधि कहता है।
पहेली को बंद करने के लिए आखिरी बात यह है कि ऑब्जर्वेबल वर्ग को कैसे पता चलेगा कि कौन रुचि रखता है? अतः ऑब्जर्वेबल वर्ग को अपनी रूचि को पंजीकृत करने के लिए कुछ तंत्र की पेशकश करनी चाहिए। एक विधि जैसे addObserver(Observer o)
आंतरिक रूप से पर्यवेक्षक को पर्यवेक्षकों की सूची में जोड़ देता है, ताकि जब कुछ महत्वपूर्ण होता है, तो यह सूची से गुजरता है और सूची में प्रत्येक उदाहरण के ऑब्जर्वर इंटरफ़ेस की संबंधित अधिसूचना विधि को कॉल करता है।
हो सकता है कि साक्षात्कार में उन्होंने आपसे स्पष्ट रूप से java.util.Observer
और java.util.Observable
सामान्य अवधारणा के बारे में नहीं पूछा । अवधारणा एक डिजाइन पैटर्न है, जो जावा को जरूरत पड़ने पर इसे जल्दी से कार्यान्वित करने में आपकी सहायता के लिए सीधे बॉक्स से समर्थन प्रदान करने के लिए होता है। इसलिए मैं आपको सुझाव दूंगा कि आप वास्तविक तरीकों / कक्षाओं के बजाय अवधारणा को समझें (जो आप उनकी आवश्यकता होने पर देख सकते हैं)।
अपडेट करें
आपकी टिप्पणी के जवाब में, वास्तविक java.util.Observable
वर्ग निम्नलिखित सुविधाएं प्रदान करता है:
java.util.Observer
उदाहरणों की एक सूची बनाए रखना । अधिसूचित होने में दिलचस्पी रखने वाले नए उदाहरणों को इसके माध्यम से जोड़ा जा सकता है addObserver(Observer o)
, और हटाया जा सकता है deleteObserver(Observer o)
।
आंतरिक स्थिति बनाए रखना, यह निर्दिष्ट करना कि क्या पर्यवेक्षकों के लिए अंतिम अधिसूचना के बाद से वस्तु बदल गई है। यह उपयोगी है क्योंकि यह उस हिस्से को अलग करता है जहां आप कहते हैं कि वह Observable
बदल गया है, उस हिस्से से जहां आप परिवर्तनों को सूचित करते हैं। (जैसे यह उपयोगी है यदि आपके पास कई परिवर्तन हो रहे हैं और आप केवल प्रत्येक छोटे कदम के बजाय प्रक्रिया के अंत में सूचित करना चाहते हैं)। इसके माध्यम से किया जाता है setChanged()
। इसलिए आप इसे तभी कहते हैं जब आप कुछ बदल जाते हैं Observable
और आप चाहते हैं कि बाकी Observers
को अंततः इसके बारे में पता चले।
सभी पर्यवेक्षकों को सूचित करते हुए कि विशिष्ट Observable
ने राज्य बदल दिया है। इसके माध्यम से किया जाता है notifyObservers()
। यह जांचता है कि क्या setChanged()
अधिसूचना के साथ आगे बढ़ने से पहले ऑब्जेक्ट वास्तव में बदल गया है (यानी कॉल किया गया था)। Object
यदि आप अधिसूचना के साथ कुछ अतिरिक्त जानकारी पास करना चाहते हैं, तो 2 संस्करण हैं, एक तर्क के साथ और एक तर्क के साथ। आंतरिक रूप से ऐसा होता है कि यह सिर्फ Observer
उदाहरणों की सूची के माध्यम से पुनरावृत्ति करता है और update(Observable o, Object arg)
उनमें से प्रत्येक के लिए विधि कहता है। यह बताता है कि Observer
कौन सी ऑब्जर्वेबल ऑब्जेक्ट थी जो बदल गई (आप एक से अधिक अवलोकन कर सकते हैं), और Object arg
संभावित रूप से कुछ अतिरिक्त जानकारी ले जाने के लिए (के माध्यम से पारित) notifyObservers()
।