2012-03-21 8 views
7

मैं अपनी पहली लाइब्रेरी लिखने की कोशिश कर रहा हूं, लेकिन मैं अभी भी कुछ डिज़ाइन समस्याओं को मार रहा हूं।जावा लेखन पुस्तकालय

मेरी लाइब्रेरी में बहुत सारी कॉन्फ़िगरेशन की अपेक्षा है जिसके लिए मैंने इंटरफ़ेस और डिफ़ॉल्ट Impl कक्षाएं बनाई हैं, लेकिन अब मेरी लाइब्रेरी को कॉलिंग के साथ बहुत सारी बातचीत की आवश्यकता है। यह इंटरफेस के माध्यम से भी किया जाता है, लेकिन मुझे यह महसूस हो रहा है कि उपयोगकर्ता को कई विधियों को ओवरराइड करने के लिए मजबूर होना पड़ता है जो कुछ डिफ़ॉल्ट गलती या यहां तक ​​कि null लौटाते हैं। क्या इन सभी को "आप कर सकते हैं लेकिन आपको लागू करने की आवश्यकता नहीं है" भागों को और अधिक वैकल्पिक बनाने के लिए कुछ अच्छा तरीका है?

उत्तर

10

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

अमूर्त बेस क्लास विधियों के डिफ़ॉल्ट कार्यान्वयन प्रदान कर सकता है ताकि आपके लाइब्रेरी उपयोगकर्ता को इन्हें स्वयं बनाने की आवश्यकता न हो। यह अमूर्त तरीकों को भी परिभाषित कर सकता है कि API उपयोगकर्ता लागू होना चाहिए यदि वे एक ठोस उपclass बनाना चाहते हैं।

public abstract class MyBaseClass implements MyInterface { 
    // abstract method 
    // anyone who extends must implement this  
    public abstract void myMethod1(); 

    // default error implementation 
    // overriding is optional, but if used it will throw an error 
    public void myMethod2() { 
     throw new UnsupportedOperationException(); 
    } 

    // default implementation that subclasses may find useful: 
    public void doBothMethods() { 
     myMethod1(); 
     myMethod2(); 
    } 
} 
+3

इसके कुछ अच्छे उदाहरणों के लिए, ['java.util.AbstractCollection'] (http://docs.oracle.com/javase/6/docs/api/java/util/AbstractCollection.html) और इसकी जांच करें उपवर्गों। – Taymon

2

यह निश्चित रूप से एक ऐसा क्षेत्र है जहां आदर्श दृष्टिकोण नहीं है। इसे इस तरह पहचाना गया है, और इसे public defender methods का उपयोग करके संबोधित किया गया है। लिंक आपको एक (आधिकारिक) भाषा वृद्धि प्रस्ताव पर ले जाएगा।

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

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