2011-11-07 29 views
12

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

अब मैं के बारे में अपने मुख्य आवेदन शुरू करने के लिए कर रहा हूँ और सिर्फ पढ़ा है इस

Making a JFrame and Observable Object

क्यों पोस्टर नमूदार के इस्तेमाल के खिलाफ की सलाह दी है और इसके बजाय propertychangelistenr उपयोग करने के लिए कहा था? क्या देखने योग्य उपयोग करने में कोई समस्या है?

सादर

उत्तर

17

पर्यवेक्षक और श्रोता पैटर्न बहुत समान हैं। लेकिन पर्यवेक्षक की कमजोरी है: सभी अवलोकन एक ही हैं। आपको instanceof पर आधारित तर्क को लागू करना होगा और Observable.update() विधि में कंक्रीट प्रकार को ऑब्जेक्ट डालना होगा।

श्रोताओं अलग हैं। बहुत सारे श्रोता प्रकार हैं। उदाहरण के लिए माउस श्रोता, कीबोर्ड श्रोता आदि। प्रत्येक में कई कॉलबैक विधियां होती हैं (यानी keyPressed(), keyReleased() आदि)। इसलिए, आपको उस तर्क को लागू करने की आवश्यकता नहीं है जिसे ईवेंट हैंडलर में "यह मेरा ईवेंट" प्रश्न का उत्तर देना चाहिए।

मुझे लगता है कि यही कारण है कि श्रोता मॉडल बेहतर है।

1

PropertyChangeListener नमूदार पैटर्न के एक विशेष मामला है। मुझे लगता है कि दोनों समाधान एक डिजाइन परिप्रेक्ष्य से अच्छा है। इस बीच जहां तक ​​मुझे याद है कि PropertyChangeListener ने कुछ समर्थन में बनाया है इसलिए इसे कम कोडिंग की आवश्यकता हो सकती है। अर्थात। देखें: http://download.oracle.com/javase/1.4.2/docs/api/java/beans/PropertyChangeSupport.html

3

एकमात्र सही उत्तर "यह निर्भर करता है"।

Observable अच्छा है जब आप किसी ऑब्जेक्ट के बारे में कोई परवाह नहीं करते हैं; आप केवल यह जानना चाहते हैं कि कुछ बदल गया और अपडेट करें उदा। वस्तु गुणों का एक कैश। यह इंटरफेस बहुत मोटा है, लेकिन अगर आपको ऐसी चीज की आवश्यकता है तो यह समय बचाने वाला हो सकता है।

दूसरी ओर, जैसा कि एलेक्सआर ने देखा, आप यह भी नहीं जानते कि हाथ से पहले किस तरह का तर्क पारित हो जाता है (यह null मान भी हो सकता है!)। इससे इसके साथ कुछ उपयोगी करना मुश्किल हो जाता है। एक उचित श्रोता वर्ग में एक समृद्ध एपीआई हो सकती है, लेकिन आपकी प्रोजेक्ट में श्रोता इंटरफ़ेस और ईवेंट क्लास जोड़ने की लागत पर।

1

अंतर यह है कि आप उनका उपयोग कैसे करते हैं। पर्यवेक्षण के अधिकांश समय के उप-वर्गों में कोई विशेष कार्यान्वयन नहीं होता है - आप केवल नए प्रकार के पर्यवेक्षण प्राप्त करने के लिए इसका उत्तराधिकारी होते हैं। दूसरी ओर श्रोताओं विशेष इंटरफ़ेस (या शीर्ष स्तर EventListener इंटरफ़ेस) लागू करते हैं और इसलिए कुछ तरीकों को लागू करना होगा।

6

डीजनलेकिक और अन्य शायद अब महसूस कर चुके हैं कि Observableinterface नहीं है। Java.util.Observable के साथ यह पूरी समस्या है!

Observable के उपयोगकर्ता को इसका उत्तराधिकारी होना है, और कुछ भी नहीं।

Java.RMI या Listener events पर विचार करें।

+0

आप बिल्कुल सही हैं! – DejanLekic

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