मैंने कई स्थानों पर पढ़ा है कि सिंगलेट्स इंटरफेस का उपयोग कर सकते हैं। कुछ मैं इसे समझने में असमर्थ हूं।एक सिंगलटन कक्षा इंटरफ़ेस का उपयोग कैसे कर सकती है?
उत्तर
प्रत्येक वर्ग एक इंटरफेस को कार्यान्वित कर सकता है, और सिंगलटन सिर्फ एक "सामान्य" वर्ग है जो सुनिश्चित करता है कि किसी भी समय यह केवल एक उदाहरण मौजूद है, अन्य व्यावसायिक तर्क के अलावा यह लागू हो सकता है। इसका यह भी अर्थ है कि सिंगलटन में कम से कम 2 जिम्मेदारियां हैं और यह ओओ डिजाइन अच्छा नहीं है क्योंकि कक्षाओं में केवल 1 जिम्मेदारी होनी चाहिए और यह सुनिश्चित करना चाहिए कि वे उस जिम्मेदारी पर अच्छे हैं, लेकिन यह एक और चर्चा है।
एक सिंगलटन का एक उदाहरण है - इसमें कभी एक से अधिक उदाहरण नहीं हैं। आप शायद संदर्भ-प्राप्त करने के लिए कुछ स्थिर सदस्यों का उपयोग करते हैं और यह सुनिश्चित करने के लिए कि इसे कभी भी कई उदाहरण नहीं मिलते हैं, लेकिन अधिकांश भाग के लिए कक्षा किसी भी अन्य वर्ग के समान होती है।
कुछ की तरह:
public interface MyInterface
{
}
और
public class MySingleton implements MyInterface
{
private static MyInterface instance = new MySingleton();
private MySingleton()
{
}
public static MyInterface getInstance()
{
return instance;
}
}
आपको इसे एक सिंगलटन बनाने के लिए उस कक्षा में एक निजी नो-Args कन्स्ट्रक्टर जोड़ने की आवश्यकता है। –
एफवाईआई, सिंगलटन को लागू करने के लिए जावा में सबसे अच्छा तरीका एक एकल तत्व enum का उपयोग कर है।यह सार्वजनिक क्षेत्र के दृष्टिकोण से अधिक संक्षिप्त है और यह धारावाहिक तंत्र को मुफ्त में प्रदान करता है और यह प्रतिबिंब हमलों के खिलाफ सुरक्षा भी प्रदान करता है। इस विधि को अभी तक व्यापक रूप से अपनाया जाना बाकी है लेकिन यह जानना दिलचस्प हो सकता है। अधिक जानकारी के लिए जोशुआ ब्लोच द्वारा "प्रभावी जावा" में इसके बारे में आइटम देखें। – nkr1pt
@ एंड्रयू: धन्यवाद, मैं एसओ और दिन की नौकरी के बीच उछाल रहा था और दुर्घटना से चूक गया :-) –
मूल रूप से, एक सिंगलटन वर्ग एक वर्ग जो एक instantiated किया जा सकता है और केवल एक बार होता है। सिंगलटन क्लास पैटर्न को सिंगलटन क्लास का उदाहरण प्राप्त करने और इसके कन्स्ट्रक्टर तक पहुंच प्रतिबंधित करने के लिए एक स्थिर विधि का उपयोग करके कार्यान्वित किया जाता है।
एक इंटरफ़ेस के उपयोग के साथ, यह किसी अन्य वर्ग के इंटरफेस को लागू करने के तरीके के समान होगा।
और यह उस वस्तु के क्लोनिंग की अनुमति नहीं देनी चाहिए।
मुझे लगता है कि मैं आपकी समस्या को समझ गया। आप इंटरफ़ेस में फ़ैक्टरी विधि को परिभाषित करना चाहते हैं (इंस्टेंस() प्राप्त करने के लिए स्थिर विधि)। लेकिन चूंकि फ़ैक्टरी विधि को इंटरफ़ेस में परिभाषित नहीं किया जा सकता है, इसलिए यह तर्क काम नहीं करेगा।
एक विकल्प एक फैक्ट्री क्लास रखना है जो उस स्थिर विधि को रखता है। तो वहाँ धारण करने के लिए स्थिर विधि दूसरा इंटरफ़ेस तिहाई है तीन वर्गों प्रथम श्रेणी हो जाएगा ठोस वर्ग
है लेकिन हम ठोस निर्माता निजी नहीं कर सकते।
लेकिन अगर आपके बुनियादी ढांचे दो संकुल जनता के लिए एक और निजी
के लिए सार्वजनिक रूप से इंटरफेस को परिभाषित अन्य है, ठोस वर्ग पैकेज स्तर (बाहर किसी भी उपयोग संशोधक के साथ) बनाने के लिए और फैक्टरी वर्ग और स्थिर विधि सार्वजनिक कर दिया।
मुझे उम्मीद है कि यह आपकी मदद कर सकता है।
- 1. क्या कक्षा एक कक्षा दोनों का विस्तार कर सकती है और एक इंटरफ़ेस
- 2. इंटरफ़ेस बिल्डर में सिंगलटन का उपयोग करें?
- 3. सिंगलटन कक्षा का परीक्षण कैसे करें?
- 4. Class.forName() का उपयोग कर Instantiate सिंगलटन ऑब्जेक्ट?
- 5. स्कैला विशेषता कक्षा का विस्तार क्यों कर सकती है?
- 6. इंटरफ़ेस बिल्डर में सिंगलटन एआरसी
- 7. एक इंटरफ़ेस
- 8. कतार एक इंटरफ़ेस है जबकि कक्षा एक स्टैक क्यों है?
- 9. एक सिंगलटन कक्षा को गलत बना रहा है?
- 10. स्वचालित संपत्ति का उपयोग कर एक इंटरफ़ेस का स्पष्ट कार्यान्वयन
- 11. इंटरफेस या एक सार कक्षा: किस का उपयोग करना है?
- 12. क्या एक पाइथन कक्षा अपनी कक्षा का एक नया उदाहरण लौटा सकती है?
- 13. विधि स्थानीय आंतरिक कक्षा केवल अंतिम स्थानीय चर का उपयोग कर सकती है। क्यों?
- 14. कक्षा क्यों सी # में अपनी खुद की नेस्टेड कक्षा का विस्तार नहीं कर सकती है?
- 15. मेरी कक्षा इसके अंदर घोषित इंटरफ़ेस को क्यों लागू नहीं कर सकती?
- 16. कक्षा फ़ाइल कितनी इंटरफेस लागू कर सकती है
- 17. एक ऑटो-प्रॉपर्टी का उपयोग कर एक सिंगलटन को लागू करना एक अच्छा विचार है?
- 18. मुझे एक जेनेरिक पैरामीटर की आवश्यकता कैसे हो सकती है जो एक इंटरफ़ेस लागू करता है?
- 19. एक एसपीआई इंटरफ़ेस का उपयोग कर माइक्रोएसडी कार्ड की शुरुआत
- 20. क्या सी # कक्षा स्वयं के उदाहरण उत्पन्न कर सकती है?
- 21. पीएचपी: सिंगलटन बनाम स्टेटिक कक्षा
- 22. इंटरफ़ेस/सार कक्षा
- 23. PHP: सार और इंटरफ़ेस कक्षा का उपयोग कब करें?
- 24. आप एक सार कक्षा और इंटरफ़ेस का उपयोग करने के बीच कैसे निर्णय लेते हैं?
- 25. सी # में, क्या कक्षा किसी अन्य वर्ग और इंटरफ़ेस से प्राप्त हो सकती है?
- 26. एएसपी.नेट एमवीसी का उपयोग कर डैशबोर्ड उपयोगकर्ता इंटरफ़ेस कैसे बनाएं?
- 27. मैं जावा में एक अमूर्त सिंगलटन कक्षा कैसे कार्यान्वित कर सकता हूं?
- 28. वरीयता सक्रियता एक कस्टम वरीयता फ़ाइल का उपयोग कैसे कर सकती है
- 29. जोडाटाइम का उपयोग कर एक वर्ष में मुझे दिनों की संख्या कैसे मिल सकती है?
- 30. reflection.emit का उपयोग कर स्पष्ट इंटरफ़ेस कार्यान्वयन को कैसे निकालें?
क्यों सिंगलटन अच्छा ओओ डिज़ाइन नहीं है? वास्तव में सबसे आम ओओ डिजाइन पैटर्न में से एक है –
@ क्रिस्टियन विल्मा: (हां, देर से) मुद्दा यह है कि यह * ग्लोबल वैरिएबल * की तरह * ग्लोबल स्टेट * बनाता है, और इसी तरह के मुद्दों से पीड़ित है। उदाहरण के लिए, कक्षाओं का परीक्षण करना मुश्किल है जो बाहरी ज्ञान के बिना आंतरिक रूप से सिंगलेट का अनुरोध करते हैं। आपका उत्पादन डीबी कचरा/परीक्षण डेटा से भरा है? सिंगलेट के लिए जाँच करें। एक बग शिकार करना? यदि आपके पास सिंगलेट हैं, और इसलिए वैश्विक स्थिति है, तो आप केवल सीमित दायरे पर ध्यान केंद्रित नहीं कर सकते हैं; आपको कोड-बेस को ध्यान में रखना होगा। एक सिंगलटन धन्यवाद। ध्यान दें कि यह सिंगलटन * पैटर्न * के बारे में है, न कि सिंगलटन * ऑब्जेक्ट्स *। सामान्य उपयोग का मतलब यह नहीं है कि यह "अच्छा" होना चाहिए। – ray