2012-03-26 7 views
5

मैं एक आवेदन के लिए एक लॉगजर बना रहा हूँ। मैं एक थर्ड पार्टी लॉगर लाइब्रेरी का उपयोग कर रहा हूं। जिसमें लॉगर को सिंगलटन के रूप में लागू किया जाता है।एक सिंगलटन कक्षा को गलत बना रहा है?

मैंने उस लॉगर क्लास को बढ़ाया क्योंकि मैं कुछ और स्थिर कार्य जोड़ना चाहता हूं। इन स्थिर कार्यों में मैं आंतरिक रूप से लॉगर के उदाहरण (जो एकल है) का उपयोग करता हूं (जिसे मैंने विरासत में मिला)।

मैं न तो MyLogger का उदाहरण बनाता हूं और न ही सुपर क्लास की getInstance() विधि को फिर से कार्यान्वित करता हूं। लेकिन मुझे अभी भी माईलॉगर के विनाशक की तरह चेतावनियां मिल रही हैं जैसे कि मूल वर्ग (लॉगगर) विनाशक के रूप में नहीं बनाया जा सकता है।

मैं जानना चाहता हूं, क्या मैं कुछ गलत कर रहा हूं? सिंगलटन विरासत गलत है या टालना चाहिए ??

उत्तर

4

सिंगलटन पैटर्न की खूबियों छोड़कर एक तरफ यह उपवर्ग करने के लिए आवश्यक नहीं होना चाहिए यह बस स्थिर कार्यक्षमता जोड़ने के लिए (वहाँ सोचा था की एक स्कूल है कि यह एक विरोधी पैटर्न के रूप में वर्णन करता है)।

  • उपयोग एक मुक्त खड़े समारोह एक सी में संलग्न ++ नाम स्थान
  • सी # जावा में एक सहायक वर्ग
  • उपयोग में एक विस्तार वर्ग का प्रयोग करें: यहाँ भाषा-विशिष्ट दृष्टिकोण है कि मैं एक सिंगलटन उपवर्गीकरण पसंद करेंगे रहे हैं
  • ऑब्जेक्टिव-सी
+0

मैं सी ++ भाषा का उपयोग कर रहा हूं, मैं केवल स्थिर विधियों का एक रैपर वर्ग बनाने की सोच रहा हूं जो सिंगलटन लॉगर क्लास से प्राप्त नहीं होगा। यह कैसा है?? और क्या आप कृपया सी ++ के लिए ऊपर वर्णित विधि पर विस्तारित करेंगे। धन्यवाद .. – EngineeredBrain

+0

@ अनवरशख यह भी काम करता है - यही वह है जो मैं जावा में करता हूं, क्योंकि फ्री-स्टैंडिंग फ़ंक्शंस वहां उपलब्ध नहीं हैं।मैं उस मार्ग को सी ++ में भी जाऊंगा, लेकिन केवल तभी जब मुझे जोड़ रहे कार्यों के बीच राज्य या अन्य कार्यान्वयन विवरण साझा करना होगा। – dasblinkenlight

+0

धन्यवाद !! मैं इसके ऊपर एक रैपर लिखकर कोशिश करूंगा। – EngineeredBrain

0

मैं जहां भी आवश्यक हो वहां सिंगलटन में एक गैर-सिंगलटन और प्रतिनिधि कॉल का उपयोग करूंगा। जब भी आपको सिंगलटन से छुटकारा पाने का मौका मिलता है, तो इसके लिए जाएं।

+0

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

+0

एक रैपर के लिए जाओ। यही मेरा मतलब है 'प्रतिनिधि कॉल'। –

0

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

0

में एक श्रेणी का उपयोग करें मैं एक आवरण लेखन लगता है कि अधिक वर्ग उचित समाधान नहीं है, क्योंकि आप हर विधि आप सिंगलटन से जरूरत के लिए आवरण लिखने के लिए की जरूरत है। और आप दर्जनों कार्यों को लिखने में समाप्त होते हैं।

इसके अलावा आप सिंगलटन में उपलब्ध सभी कार्यों का उपयोग करने से खुद को प्रतिबंधित कर रहे हैं।

कोई अच्छा विचार नहीं !!!

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