2012-02-11 16 views
12

नाम (और javadocs) का अर्थ है कि MouseAdapter एक एडाप्टर (डिज़ाइन पैटर्न) है। लेकिन मुझे ऐसा कुछ नहीं दिख रहा है - यह कम से कममाउस एडाप्टर एडाप्टर क्यों है?

एकमात्र अनुकूलन यह है कि आप किसी भी विधि से MouseAdapter का उदाहरण पास कर सकते हैं जो किसी भी विधि से अपेक्षा करता है इंटरफेस। इसलिए, आप MouseListener उदाहरण का उपयोग करना संभव बनाते हैं जहां केवल MouseMotionListener अपेक्षित है। लेकिन कोई "अनुवाद" नहीं हो रहा है। और यह गोफ के यूएमएल के अनुरूप नहीं है - "क्लास एडाप्टर" संस्करण में यह उम्मीद की जाती है कि एक विधि में कॉल एडैप्टी से एक विधि को आमंत्रित करता है।

तो, एक एडाप्टर (डिजाइन पैटर्न) जो है, या यह सिर्फ एक यादृच्छिक नाम है कि भ्रम का कारण बनता है?

उत्तर

12

MouseAdapter पहली बार जावा 1.1 में दिखाई दिया Feb 1997 में जारी किया गया। इसका मतलब यह है कि यह 1996 में कुछ समय विकसित किया गया था (या 1995?)

यूएमएल (अपने मसौदे में) completed by 1997 था।

डिजाइन पैटर्न पर पहली GOF पुस्तक published in 1995 था।

तो, मुझे नहीं लगता कि एडाप्टरMouseAdapter में इसी डिज़ाइन पैटर्न के साथ कुछ लेना देना था। या, अगर ऐसा होता है, तो डेवलपर्स के पास डिज़ाइन पैटर्न व्यक्त करने के लिए कोई एकीकृत भाषा नहीं थी जो वास्तविक अर्थ को समझना बहुत कठिन बना देगा।

5

हाँ, यह GOF पैटर्न, क्योंकि यह कुछ भी अनुकूलन नहीं करता है के अर्थ में एक एडाप्टर नहीं है। यह [woolf97] सार कक्षा पैटर्न का एक उदाहरण माना जा सकता है:

सुपर क्लास एक पूर्ण कार्यान्वयन एक डिफ़ॉल्ट या कम से कम कार्यान्वयन है कि प्रदान कर सकता है।

1

जैसा कि अन्य उत्तरों ने कहा है, यह एक गोफ एडाप्टर पैटर्न नहीं है। इसका मुख्य उद्देश्य MouseListener (या MouseMotionListener) को अन्य सभी विधियों के व्यर्थ खाली कार्यान्वयन के बजाय MouseAdapter (अक्सर केवल mouseClicked()) में वांछित तरीकों से अधिक सवारी करके सक्षम करने के लिए सक्षम करना है। इसलिए यह बहुत अनावश्यक कोड बचाता है, खासकर जब अज्ञात घटना श्रोताओं का उपयोग करते हैं। उदाहरण (here से लिया गया) के लिए

someObject.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
      ...//Event listener implementation goes here... 
     } 
    }); 
0

मुझे पता है कि पहले से ही है इस सवाल के लिए एक स्वीकृत जवाब है, लेकिन यह एक ही सवाल यहाँ कहा गया था:

MouseAdapter: which pattern does it use?

अधिक के विवरण के लिए वहाँ देखें, लेकिन MouseAdapter बहुत अधिक उपयोग करने योग्य फ़ॉर्म में बहुत ही अजीब माउसलिस्टर इंटरफ़ेस को अपनाने।

+0

इस तर्क के साथ समस्या यह है कि, जैसा कि अन्य उत्तरों इंगित करते हैं, MouseAdapter स्थिति में कोई पूर्व-मौजूदा एडैप्टी नहीं हैं। गोफ एडाप्टर की प्रेरणा (मैं गोफ बुक को उद्धृत कर रहा हूं) "कभी-कभी टूलकिट क्लास जिसे पुन: उपयोग के लिए डिज़ाइन किया गया है, केवल पुन: प्रयोज्य नहीं है क्योंकि इसका इंटरफ़ेस डोमेन-विशिष्ट इंटरफ़ेस से मेल नहीं खाता है।" MouseAdapter एक * एडाप्टर * है क्योंकि इसे माउस ईवेंट कैप्चर करने के लिए आसानी से अनुकूलित किया जा सकता है (अनुकूलित)। गोफ एडाप्टर का कहना है कि आपके पास कुछ * लीगेसी क्लास * (टूलकिट) है जिसे आप नहीं बदल सकते हैं, इसलिए आप अपने इंटरफ़ेस को अपने एप्लिकेशन की आवश्यकता के अनुसार अनुकूलित करते हैं। – Fuhrmanator

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