2011-06-22 19 views
43

मुझे हमेशा सामान्य घटना-संचालित दृष्टिकोण के समान ऑब्जर्वर पैटर्न मिल गया। असल में, मैंने लगभग विश्वास किया है कि वे वास्तव में एक ही चीज़ का जिक्र करते हुए अलग-अलग नाम हैं। वे दोनों श्रोताओं के रूप में कुछ भी करने के लिए समान अवधारणाओं का उपयोग करते हैं और यहां तक ​​कि कार्यान्वयन में भी, वे लगभग एक ही चीज हैं, जो एक कार्यवाही करने के लिए कॉलबैक विधि/कार्य है। यह कम से कम जावा में है।ऑब्जर्वर पैटर्न और इवेंट-संचालित दृष्टिकोण के बीच अंतर

अन्य भाषाओं में एक्शनस्क्रिप्ट/फ्लेक्स कहते हैं, घटनाएं अधिक उपयोगकर्ता के अनुकूल हैं और ऐसा लगता है कि यह पर्यवेक्षक पैटर्न परिभाषित करता है। लेकिन फिर भी, अवधारणाएं वही लगती हैं।

लेकिन क्या यह वाकई सच है? क्या पर्यवेक्षक पैटर्न सामान्य घटना-संचालित प्रोग्रामिंग शैली के समान ही है?

+0

संभावित डुप्लिकेट [पर्यवेक्षक पैटर्न इवेंट संचालित मॉडल से अलग कैसे होता है?] (Http://stackoverflow.com/questions/807778/how-is-the-observer-pattern- अलग-from-an-event -ड्रिवेन-मॉडल) – nawfal

उत्तर

28

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

+89

इस भ्रमित मुझे और भी भ्रमित पढ़ना। – crush

+0

@ क्रश मैं जावा में अधिक स्पष्टीकरण के लिए एक उदाहरण जोड़ सकता हूं, ईडीटी एक इवेंट बस है जो सिस्टम को भेजे गए सभी कार्यक्रमों को कैप्चर करता है, मान लें कि एक बटन क्लिक करें, ईडीटी क्लिक इवेंट भेज देगा, बटन इसे पकड़ लेगा - ध्यान दें कि बटन के पैरेंट कंटेनर ईवेंट को भी पकड़ सकते हैं और बटन स्वयं अन्य प्रकार की घटनाओं को पकड़ सकता है- यह इवेंट पैटर्न का एक उदाहरण है। अब बटन ने श्रोताओं को पंजीकृत किया है, जो इस घटना को वितरित करने वाले बटन से अधिसूचित और बुलाए गए हैं, यह पंजीकरण पर्यवेक्षक पैटर्न – DrAhmedJava

+1

का एक उदाहरण है, इसलिए घटनाएं किसी भी इच्छित रिसीवर के साथ प्रसारण की तरह नहीं हैं, जबकि पर्यवेक्षक पैटर्न मल्टीकास्ट की तरह है, जहां रिसीवर सीधे है देखने योग्य से सिग्नल के लिए देख रहे हैं? – Gulshan

0

हां, वे मुख्य रूप से समान हैं।

घटनाक्रम कुछ भाषाओं के लिए "अंतर्निर्मित" पर्यवेक्षक पैटर्न टेम्पलेट की तरह कुछ हैं।

इस प्रकार, आप वास्तव में ऐसी भाषा में पर्यवेक्षक पैटर्न को लागू नहीं करेंगे जो घटनाओं का समर्थन करता है क्योंकि वे पहले से ही जो आप खोज रहे हैं उसे प्रदान करते हैं।
दूसरी ओर, आप उन भाषाओं में ईवेंट-संचालित लिख सकते हैं जिनमें पर्यवेक्षक पैटर्न का उपयोग करके ईवेंट की कमी है।

+0

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

6

अंतर संख्या 1 हो सकता है, कि ईवेंट-सिस्टम में हमेशा एक ईवेंटडिस्चैच्रेड होता है जो अपने पर्यवेक्षकों से अवलोकन करता है ताकि घटनाएं पर्यवेक्षकों तक तुरंत नहीं पहुंच सकें। जबकि वास्तविक अवलोकन योग्य पर्यवेक्षक विधियों को सीधे कॉल करते हैं, घटना संचालित पर्यवेक्षी अपनी घटनाओं को एक घटनाक्रम में छोड़ देते हैं। फिर ईडीटी उन घटनाओं को पंजीकृत श्रोताओं को बचाता है।

10

जब प्रकाशक या विषय पर एक राज्य परिवर्तन होता है,

  • घटना प्रेरित वास्तुकला (संदेश चालित वास्तुकला है), करने के लिए जिम्मेदार सब्सक्राइबर को संदेश देने एसिंक्रोनस।

  • ऑब्जर्वर पैटर्न (एक सॉफ्टवेयर डिज़ाइन पैटर्न है), कमांड सब्सक्राइबर कुछ करने के लिए सब्सक्राइबर।

1

मैंने इस प्रश्न के लिए थोड़ा सा खोज किया है। इस धागे के लिए, मुझे "प्रेषक" पर स्पेसरैट से "क्या अर्थशास्त्र" पर अंक एंजेल ओस्फेयर से बिंदु मिलता है और मदद करता है।

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

0

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

0

Wikipedia से:

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

यह मुख्य रूप से "ईवेंट संचालित" सॉफ़्टवेयर में वितरित ईवेंट हैंडलिंग सिस्टम को लागू करने के लिए उपयोग किया जाता है। जावा और सी # जैसी अधिकांश आधुनिक भाषाओं ने "ईवेंट" संरचनाओं में बनाया है जो आसान प्रोग्रामिंग और शॉर्ट कोड के लिए पर्यवेक्षक पैटर्न घटकों को लागू करते हैं।

पर्यवेक्षक पैटर्न थोड़ा और अमूर्त और सैद्धांतिक है। घटनाक्रम एक (आमतौर पर अंतर्निर्मित) कार्यान्वयन है, हालांकि एंजेल के उत्तर में उल्लेखित घटनाओं को पर्यवेक्षक पैटर्न में सख्ती से परिभाषित किए गए कुछ अन्य परिस्थितियों में उपयोग करने में सक्षम होना पड़ता है।

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