मुझे खेद है कि यह एक डुप्लिकेट या बहुत प्राथमिक है, लेकिन मैं एक सिंगलटन क्लास कैसे बना सकता हूं जिसे उपclassed किया जा सकता है?मैं अन्य कक्षाओं को सिंगलटन कक्षा से कैसे प्राप्त करूं?
उत्तर
स्टीव येग है एक मनोरंजक article एकमात्र है कि इस बोली में उपवर्गीकरण उल्लेख के बारे में:
तो फिर वहाँ उपवर्गीकरण बात है। सिंगलटन को उपclass करना लगभग असंभव है, और यदि आप इसे प्रबंधित करते हैं, तो आपको पहले स्थान पर सिंगलटन का उपयोग नहीं करना चाहिए था। आप भी वहां जाना चाहते हैं। मेरे पास सड़कों पर चले गए हैं जिन्हें मैं नहीं बताता हूं। बस दिखाएं कि आप इसे नहीं कर सकते हैं, और आप अपने आप को अद्भुत मात्रा दर्द से बचाएंगे।
तो उत्तर "नहीं" है? – unj2
अगर आप इसे इस तरह पढ़ना चाहते हैं, तो हाँ, यह नहीं है। या आप इसे पढ़ सकते हैं और देख सकते हैं कि उत्तर हाँ है, लेकिन आपको अभी भी यह कोशिश नहीं करनी चाहिए, और आप मूल्यांकन करना चाहेंगे कि आप पहली जगह में सिंगलटन का उपयोग क्यों कर रहे हैं। –
आप आमतौर पर किसी भी उपयोगी अर्थ में नहीं कर सकते हैं। सिंगलटन कक्षाओं का उपयोग न करने का यह एक और कारण होगा।
आप अपने सिंगलटन निर्धारित किया है तो के रूप में:
public class Singleton {
private static Singleton instance;
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
private Singleton() {
}
}
तो फिर तुम सिर्फ कर सकते हैं:
public class NewSingleton extends Singleton {
}
लेकिन, आप निजी तरीकों का उपयोग करने के लिए, इसलिए यदि आप करना चाहते हैं नहीं कर सकेंगे सिंगलटन का उपयोग करें, आपको अभी भी Singleton.getInstance();
पर कॉल करने की आवश्यकता होगी ताकि आप इसे विस्तारित करके कुछ हासिल न करें।
लेकिन, ऐसा कोई कारण नहीं है कि आप इसे क्यों नहीं कर सकते हैं।
अब, यदि आप सिंगलटन कक्षा में अधिक फ़ंक्शंस जोड़ना चाहते हैं तो आप एस्पेक्टजे से इंटर-टाइप पहलुओं का उपयोग कर सकते हैं और सिंगलटन में नए तरीकों/गुणों को इंजेक्ट कर सकते हैं जिसका उपयोग सिंगलटन द्वारा किया जा सकता है।
सिंगलटन उदाहरण विरासत को सीमित नहीं करता है। खैर - जैसा कि पहले से ही बताया गया है कि यह विरासत की उपयोगिता को सीमित करता है और फिर आप निजी कन्स्ट्रक्टर को पैक या संरक्षित करने के लिए आराम कर सकते हैं (जिसे आप तर्क दे सकते हैं कि सिंगलटन की सिंगलोनिस कम हो जाती है) लेकिन उद्देश्य क्या है?
असल में, मुझे नहीं लगता कि यह संभव है।
आप अपने कन्स्ट्रक्टर को private
घोषित करके कक्षा एकल एकल बनाते हैं। लेकिन यदि आप अपने सिंगलटन वर्ग के उप-वर्ग घोषित करने का प्रयास करते हैं, तो सबक्लास निर्माता कन्स्ट्रक्टर सुपरक्लास के रचनाकारों को देखने में सक्षम नहीं होंगे ... इसलिए वे संकलित नहीं होंगे; जैसे
public class A() {
private A() { }
}
public class B() {
private B() { }
}
दोनों सूर्य JDK 1.6 और ग्रहण गेनीमेड संकलक प्रभाव है कि एक के लिए कोई आर्ग निर्माता दिखाई नहीं देता है करने के लिए, निर्माता बी में एक संकलन त्रुटि दे।
आप private
रचनाकारों की दृश्यता बढ़ा सकते हैं, लेकिन फिर कुछ भी नहीं है (अच्छी समझ के अलावा) किसी को इसके कई उदाहरण बनाने से रोकना। दूसरे शब्दों में यह वास्तव में एक सिंगलटन वर्ग नहीं है।
संपादित करें: मुझे लगता है कि एक कोशेर विकल्प एक या अधिक अमूर्त (गैर-सिंगलटन) कक्षाओं के पेड़ को परिभाषित करना होगा, जिन तरीकों से आप आम होना चाहते हैं, और फिर पत्ती वर्गों के रूप में एकाधिक सिंगलटन कक्षाएं परिभाषित करें के रूप में उपयुक्त। लेकिन यह एक सिंगलटन वर्ग नहीं है जो दूसरे को उप-वर्गीकृत करता है।
जैसा कि अन्य ने पहले ही जवाब दिया है, सिंगलटन सबक्लासिंग के उपयोग छोटे हैं। यदि आपको सिंगलटन के संदर्भ में एक रणनीति पैटर्न की आवश्यकता है, तो आप एकल इंटरफ़ेस को परिभाषित कर सकते हैं और सिंगलटन इंस्टेंस में उस इंटरफ़ेस के कार्यान्वयन के लिए प्रतिनिधि हो सकते हैं। यह समस्या को एक परत नीचे ले जाता है और इसे और स्पष्ट करता है कि आप इसे क्यों करना चाहते हैं।
अपने प्रश्न का उत्तर देने के लिए; , अपरीक्षित कोड अपवाद हैंडलिंग, आदि जोड़ने :-) Btw, सुनिश्चित करें:
public static synchronised Singleton getInstance() {
if (instance == null) {
String clsName = System.getProperties().getProperty("singleton.class");
if (className == null || 0 == clasName.length()) {
instance = new Singleton();
} else {
Class cls = Class.forName(clsName);
instance = (Singleton) cls.newInstance();
}
}
return instance;
}
अस्वीकरण: विशेष उपवर्ग आपके आवेदन का उपयोग करता है, उदाहरण के लिए प्रणाली के गुणों में परिभाषित किया गया है के लिए पसंद संभालने, आप की तरह कुछ कर सकते हैं आपकी getInstance()
विधि सिंक्रनाइज़ है।
- 1. मैं एनएसएसटींग से कक्षा कैसे प्राप्त करूं?
- 2. प्रत्येक व्युत्पन्न कक्षाओं को सिंगलटन
- 3. क्लास एट्रिब्यूट से पैटर्न से मेल खाने वाली कक्षा को कैसे हटाते हैं, लेकिन अन्य कक्षाओं को बनाए रखते हैं?
- 4. मैं यूएमएल में एक सिंगलटन के रूप में कक्षा को कैसे चिह्नित करूं?
- 5. मैं अपनी कक्षा को अपने TRttiType से कैसे चालू करूं?
- 6. संकलन समय पर सिंगलटन ऑब्जेक्ट की कक्षा कैसे प्राप्त करें?
- 7. मैं प्रॉक्सी क्लास से प्रॉक्सी क्लास को कैसे प्राप्त करूं?
- 8. PHP में, मैं डिफ़ॉल्ट पीडीओ प्राप्त कक्षा कैसे सेट करूं?
- 9. मैं अपनी कक्षाओं के बीच प्रतिनिधियों को कैसे स्थापित करूं?
- 10. मैं रुबी कक्षाओं के बीच चर कैसे पास करूं?
- 11. सिंगलटन विरासत
- 12. मैं वीबीए से SQLite कैसे प्राप्त करूं?
- 13. मैं XDocument से नेमटेबल कैसे प्राप्त करूं?
- 14. मैं UIImagePickerControllerReferenceURL से डेटा कैसे प्राप्त करूं?
- 15. मैं शब्दकोश से कैसे प्राप्त करूं?
- 16. मैं ActionExecutingContext से MethodInfo कैसे प्राप्त करूं?
- 17. मैं कैस्परजेएस से आईफ्रेम कैसे प्राप्त करूं?
- 18. मैं कोड के किसी अन्य भाग में कक्षा से एनम मान का उपयोग कैसे करूं?
- 19. मैं कक्षा के सामान्य प्रकार को प्राप्त करने के लिए एक आंतरिक वर्ग कैसे प्राप्त करूं?
- 20. सिंगलटन कक्षा का परीक्षण कैसे करें?
- 21. मैं किसी प्रकार से TryParse विधि से कैसे प्राप्त करूं?
- 22. मैं प्रत्येक पंक्ति को एनएसएसटींग से कैसे प्राप्त करूं?
- 23. मैं आर संदर्भ कक्षा कैसे दस्तावेज करूं?
- 24. अन्य कक्षा
- 25. सिंगलटन इंस्टेंस बनाम कक्षा के तरीके
- 26. मैं PHP में आंतरिक कक्षाओं का उपयोग कैसे करूं?
- 27. मैं एनम सिंगलटन में लॉगिंग कैसे कार्यान्वित करूं?
- 28. कक्षा के संदर्भ के बिना मैं उद्देश्य सी में + कक्षा विधियों को कैसे कॉल करूं?
- 29. पीएचपी: सिंगलटन बनाम स्टेटिक कक्षा
- 30. संगठन मोड में, मैं अन्य (.org) .org फ़ाइल से अन्य .org फ़ाइलों को कैसे शामिल करूं?
डाउनवोट क्यों? यह एक वैध सवाल की तरह लगता है? –
शायद डाउनवॉटर ने हाल ही में रात्रिभोज किया था और वर्तमान में यह महसूस कर रहा है, इसलिए "वैकल्पिक" संदर्भ अपरिहार्य महसूस कर रहा है ...? –
क्षमा करें @ एलेक्स। मैंने आपके मजाक को सही तरीके से बर्बाद कर दिया क्योंकि आपने इसे पोस्ट किया था। –