2011-01-18 25 views
72

जावा के सामान्य शब्दों में, श्रोताओं & घटनाओं के लिए हैंडलर हैं।
मेरा मतलब है कि मैं उन्हें अनजाने में उपयोग करता हूं, जो भी एपीआई में उपलब्ध है।जावा में ईवेंट श्रोताओं और हैंडलर के बीच क्या अंतर है?

मेरा सवाल है, हम किस मामले में श्रोताओं का उपयोग करते हैं और हम किस मामले में ईवेंट के लिए हैंडलर का उपयोग करते हैं?

उनके बीच क्या अंतर है? लक्षण ??

मैंने कारणों की खोज की है और मुझे जावा के लिए उचित स्पष्टीकरण नहीं मिला।

+0

इस ब्लॉग पोस्ट में एक अच्छा सारांश है। http://lemnik.wordpress.com/2009/03/04/gwts-new-event-model-handlers-in-gwt-16/ – kevinarpe

उत्तर

50

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

एक श्रोता एक ऐसा ऑब्जेक्ट है जो किसी स्रोत से ईवेंट के लिए सदस्यता लेता है। सी एफ observer pattern। आम तौर पर आप कई प्रकार के कार्यक्रमों के लिए सदस्यता लेने वाले कई श्रोताओं को प्राप्त कर सकते हैं, और addXyzListener विधियों के माध्यम से जोड़े गए हैं।

उदाहरण: जावा एपीआई में MouseListener

एक हैंडलर एक ऐसी वस्तु है जो कुछ घटनाओं को संभालने के लिए ज़िम्मेदार है। एक ठेठ परिदृश्य एक विशिष्ट घटना/कार्य के लिए एक कन्स्ट्रक्टर के लिए तर्क के रूप में एक हैंडलर प्रदान करना होगा, या setXyzHandler विधि के माध्यम से हैंडलर सेट करें। दूसरे शब्दों में, आपके पास आमतौर पर प्रत्येक प्रकार की घटना के लिए एक हैंडलर होता है।

उदाहरण: जावा एपीआई में MemoryHandler

+0

नमस्ते आपके उत्तर के लिए धन्यवाद। "घटनाओं के लिए सदस्यता" से आपका क्या मतलब है?"श्रोताओं" से आपका क्या मतलब है? – BKSpurgeon

+0

@BKSpurgeon, उत्तर में जुड़े पर्यवेक्षक पैटर्न पर विकिपीडिया लेख देखें। – aioobe

2

वे अवधारणात्मक रूप से एक ही बात हैं - एक वस्तु जो यूआई घटना के जवाब में कुछ कार्रवाई करती है। आम तौर पर, स्विंग में, इन ऑब्जेक्ट्स को लुक-एंड-महसूस स्तर (निम्न स्तर के विजेट ईवेंट को संभालने के लिए) और "श्रोताओं" को अधिक सार यूआई स्तर पर "हैंडलर" कहा जाता है (जहां आप अपने एप्लिकेशन तर्क को कार्यान्वित करेंगे)।

-1

यह अर्थशास्त्र है।

  • श्रोता इंटरफ़ेस है।
  • एडाप्टर वह वर्ग है जो विशिष्ट इंटरफ़ेस लागू करता है और इसके तरीकों के लिए खाली कार्यान्वयन प्रदान करता है। यह आपको मदद करता है अगर आपको इंटरफ़ेस के सभी तरीकों को लागू करने की आवश्यकता नहीं है।
  • हैंडलर कई इंटरफेस या प्रतिनिधियों को कई इंटरफेस पर लागू करता है।

    एक श्रोता एक घटना के लिए घड़ियों निकाल दिया जाना चाहिए:

+1

मैं यह नहीं कहूंगा कि एक श्रोता एक इंटरफ़ेस है। उदाहरण के लिए [बेसिकबटन लिस्टर] (http://download.oracle.com/javase/6/docs/api/javax/swing/plaf/basic/BasicButtonListener.html) एक ठोस वर्ग है। – aioobe

20

इस तरह से मैं इसे देख रहा है। उदाहरण के लिए, KeyListener KeyEvents के लिए प्रतीक्षा करता है, MessageListener संदेशों को कतार में आने के लिए प्रतीक्षा करता है और इसी तरह।

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

4

एक श्रोता, उन ईवेंट के लिए सुनता है जो डेटा वैल्यू ऑब्जेक्ट्स हैं जो किसी ईवेंट का वर्णन करते हैं। जब घटना हुई और घटनाओं का क्रम अक्सर महत्वपूर्ण होता है। कुंजी '0' दबाकर '1' के बाद '1' और '0' से अलग है।

एक हैंडलर, एक जटिल वस्तु को संभालता है उदा। एक नया सॉकेट कनेक्शन। हैंडलर किसी भी समय के लिए ऑब्जेक्ट को संसाधित कर सकता है। वस्तु निर्माण और आदेश का समय इतना महत्वपूर्ण नहीं है। किसी भी क्रम में क्लाइंट 0 या क्लाइंट 1 से कनेक्शन हो सकता है। (उदाहरण: कुंजी बोर्ड)

30

सबसे बुनियादी फर्क संघ

  • श्रोता इवेंट स्रोत साथ जुड़ा हुआ है
  • हैंडलर एक घटना साथ जुड़ा हुआ है (उदाहरण: keydown)

आम तौर पर, केवल एक केंद्रीय हैंडलर प्रबंधक होगा जो सभी घटनाओं का प्रबंधन करेगा, जबकि श्रोता प्रत्येक मामले जो सुनना चाहता है, हैव ई श्रोताओं का अपना संग्रह प्रबंधित करने के लिए

+0

माउस इवेंट स्रोत है, यदि आप समानता को देखते हैं तो माउसलिस्टर को घटना स्रोत के साथ assocaited है whcih माउस है – Swapnil

3

एक श्रोता एक ऑब्जेक्ट होता है जिसे किसी ईवेंट के दौरान अधिसूचित किया जाता है, और इसमें 2 प्रमुख आवश्यकताएं होती हैं- 1- यह विशिष्ट के बारे में अधिसूचनाएं प्राप्त करने के लिए एक या अधिक स्रोतों के साथ पंजीकृत होना चाहिए घटना के प्रकार 2- इन अधिसूचनाओं को प्राप्त करने और संसाधित करने के लिए इसे विधियों को लागू करना होगा। हैंडलर घटनाओं से निपटने के लिए ज़िम्मेदार है।

2

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

3

मेरे दिमाग में, सबसे महत्वपूर्ण अंतर यह है कि हम श्रोताओं प्रति घटना के स्रोत का उपयोग करते हैं, हैंडलर के विपरीत, जो प्रति घटना प्रकार है।

0

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

इवेंट हैंडलर देखने योग्य घटनाओं और ui घटनाओं को अलग करने का एक तरीका है।

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