11

मैं वर्तमान में डिजाइन पैटर्न के बारे में एक कक्षा का अनुसरण कर रहा हूं और सोच रहा था कि EventListener एक Observable है?एक इवेंट लिस्टनर एक अवलोकन योग्य है?

मुझे वास्तव में उनके बीच कोई अंतर नहीं दिखता क्योंकि दोनों के पास ग्राहकों की एक सूची है और कुछ ग्राहकों के बदलाव के बाद इन ग्राहकों को सूचित करते हैं।

+4

मैं कहूंगा कि एक ईवेंट श्रोता एक पर्यवेक्षक है, है ना? –

+0

[पर्यवेक्षक डिजाइन पैटर्न बनाम "श्रोताओं"] (https://stackoverflow.com/questions/3358622/) – sepehr

उत्तर

13

एक Observable बस एक वस्तु है जहां आप इसके कार्यों को देख सकते हैं। तो कुछ भी जहां आप एक क्रिया सुन सकते हैं और फिर कहा जा सकता है कि कार्रवाई होती है Observable

इसका मतलब है कि एक ईवेंट श्रोता एक है। क्योंकि आप घटनाओं को सुन सकते हैं और घटनाएं तुरंत आपको सूचित करती हैं कि वे हुए हैं।

व्यक्तिगत रूप से जब कोई Observable कहता है तो मुझे घटनाएं होती हैं। यह मेरा कुकी कटर उदाहरण है जो अवलोकन योग्य हैं। एक समान उदाहरण एक प्रकाशन-सबस्क्राइब सिस्टम होगा जो केवल एक अलग नाम के तहत घटनाएं होती है (इसमें संक्षेप में अलग-अलग उपयोग मामले होते हैं)।

0

हाँ, यह एक घटना कतार की तरह प्रतीत होता है जहां आप विशिष्ट घटनाओं के लिए श्रोताओं को पंजीकृत करते हैं, एक पर्यवेक्षक पैटर्न का उदाहरण होगा।

2

मैंने जेडीके के स्रोत कोड को देखकर खुद कुछ और शोध किया है। मुझे लगता है कि उनके बीच एकमात्र अंतर यह है कि ObservableObservers जोड़ते समय सिंक्रनाइज़ किया जाता है और EventListener नहीं करता है (कम से कम AbstractButton नहीं है)।

8

मेरे अनुभव के लिए, एक ईवेंट श्रोता पैटर्न पर्यवेक्षक डिजाइन पैटर्न से एक अलग बात है। यह सिर्फ एक अलग नाम नहीं है या जिसका हिस्सा है।

मुझे इस ठोस तरीके से बात करनी है। उदाहरण के लिए, यह page एक ईवेंट श्रोता प्रणाली का सी # कार्यान्वयन देता है। इस प्रणाली में, एक श्रोता एक इवेंट हैंडलिंग फ़ंक्शन को सिंगलटन क्लास Events के साथ पंजीकृत करता है और दावा करता है कि यह किसी विशेष प्रकार की घटना को संभाल सकता है। Events प्रत्येक प्रकार की घटना को अपने हैंडलर फ़ंक्शन पर मैप करने के लिए एक शब्दकोश को बनाए रखता है। दूसरी ओर, किसी भी वर्ग जो घटना को ट्रिगर करना चाहता है उसे सिंगलटन के फ़ंक्शन Events.instance.Raise() के माध्यम से ऐसा करने की आवश्यकता है।

यहाँ हम 3 अंतर देख सकते हैं:

सबसे पहले उद्देश्य दो पैटर्न के अलग हैं: श्रोता डिजाइन पैटर्न,/घटना का पता लगाने दसगुणा घटना कोड से निपटने से कोड ला रहा है ताकि जब कोडों को संभालने वाली नई घटनाओं को बदलना या जोड़ना, यह अन्य घटनाओं को संभालने वाले कोडों को प्रभावित नहीं करता है; पर्यवेक्षक डिजाइन पैटर्न कुछ वस्तुओं को किसी अन्य वस्तु के परिवर्तनों का पालन करने के लिए बनाना है।

डेटा संरचना भी अलग है। श्रोता डिजाइन पैटर्न में, प्रत्येक प्रकार की घटना को अपने हैंडलिंग विधि में मैप करने के लिए केवल एक वैश्विक शब्दकोश है। यह मानचित्रण 1 से 1 है। ऑब्जर्वर पैटर्न में रहते हुए, प्रत्येक मनाया विषय पर्यवेक्षकों की एक सूची बनाए रखता है। यह मैपिंग 1 से कई है: कई पर्यवेक्षकों के लिए एक विषय। इस तरह के 1 से कई विषय-पर्यवेक्षक संबंधों के कई उदाहरण हो सकते हैं।

व्यवहार अलग है। श्रोता डिजाइन पैटर्न में, जब कोई घटना होती है, तो ईवेंट राइज़र वैश्विक मध्यस्थ (सिंगलटन Events.instance) को सूचित करता है, क्योंकि इसमें ईवेंट हैंडलर के बारे में कोई जानकारी नहीं है। ऑब्जर्वर पैटर्न में, जब कोई परिवर्तन होता है, मनाया गया विषय सीधे सभी पर्यवेक्षकों को सूचित करता है।

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