2010-01-27 7 views
6

जब आप कक्षा में कुछ अतिरिक्त जानकारी जोड़ना चाहते हैं, तो आप किस तरह से पसंद करेंगे: क्या आप उस वर्ग का विस्तार करेंगे या इसके चारों ओर एक रैपर बनायेंगे?जावा अतिरिक्त कार्यक्षमता जोड़ने के लिए कक्षा को बढ़ाएं या लपेटें

मेरे विशेष परिदृश्य में, मैं List के साथ कुछ पेजिनेशन जानकारी जोड़ना चाहता हूं जो मुझे डेटाबेस से मिलता है। यही कारण है कि पृष्ठांकन जानकारी शामिल होंगे:

int currentPage; 
int totalResults; 
int containedResultsIndex; 
int totalcontainedResults; 

और तरीकों की एक जोड़ी:

Boolean isNextPageAvailable(); 
Boolean isPrevPageAvailable(); 

क्या आपकी राय, बढ़ाने या लपेट?

उत्तर

4
    अपने मामले में
  • मौजूदा List लपेट और अपनी कक्षा में ही लागू List बनाने के लिए, सभी तरीकों मूल सूची सौंपने का (जो निर्माता में पारित हो जाता है, उदाहरण के लिए)
  • विरासत हमेशा गलत नहीं है, लेकिन में इस मामले में आपको पता नहीं चलेगा कि कौन सी कक्षा का विस्तार करना है - क्या यह ArrayList, या LinkedList होगा?
3

बहुत अधिक विस्तार बुरा है, और रचना के साथ जाने के लिए आपके कोड को पढ़ने/समझने में मुश्किल होगी, केवल एक नई कक्षा बनाएं जिसमें संग्रह और आपके अतिरिक्त सदस्यों को अंकन के लिए आवश्यक हो।

1

मैं जहां संभव हो लपेटना पसंद करता हूं। विशेष रूप से आपके List उदाहरण में - रैपर वर्ग में कोई भी सूची प्रकार हो सकता है, जबकि एक विस्तारित कक्षा एक विशिष्ट ठोस सुपरक्लास से बंधी हुई है।

8

ऐसा लगता है जैसे आप पूछ रहे हैं कि आपको अपनी स्थिति में विरासत या संरचना का पक्ष लेना चाहिए या नहीं। मैं कहूंगा कि आप List का नया कार्यान्वयन नहीं बना रहे हैं और आपको वास्तव में परवाह नहीं है कि List लागू किया गया है, इसलिए विरासत आपकी समस्या के अनुरूप नहीं है। इसके बजाय, आप पेजिंग कार्यक्षमता प्रदान कर रहे हैं। मैं एक ऐसी कक्षा तैयार करूंगा जो List या कुछ अन्य सामान्य संग्रह का उपयोग करके पेजिंग तर्क को सामान्य रूप से लपेटता है (encapsulates)।

0

यदि आप विस्तार करते हैं, तो भी आप सुपर क्लास संदर्भ के माध्यम से नई विधियों को कॉल करने में सक्षम नहीं होंगे। इसे लपेटना सबसे अच्छा है।

0

एक सुरुचिपूर्ण पेजिंगलिस्ट (विस्तार सूची) होने के लिए एक पर्याप्त दृष्टिकोण है।

  • जब आप अपनी आवश्यक सामग्री का वारिस कर सकते हैं तो प्रतिनिधि क्यों?

  • यह फ़ाइल रीडर और बुफर्डफाइल रीडर के बीच संबंधों की तरह है (और कोई भी बुरा अभ्यास नहीं कहता)।