2009-04-07 8 views
28

मैंने कुछ बार यह समझने की कोशिश की है कि सिंगलटन क्या है। शायद मैं बहुत ही दृश्यमान हूं .. तो क्या कोई इसे सरल सादृश्य में तोड़ सकता है।हाँ .. मुझे पता है .. मैं एक साधारण हूँ .. तो सिंगलटन क्या है?

इसी प्रकार के पोस्ट:

+4

हर जगह सिंगलेट्स का उपयोग शुरू करने से पहले, कृपया यह पोस्ट भी पढ़ें: http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons :-) –

+0

सी ++ में, यदि आप घोषित करते हैं परिवर्तनीय 'स्थिर' के रूप में, आप प्रभावी रूप से एक सिंगलटन बना रहे हैं। – slashmais

उत्तर

67

के रूप में अनुरोध किया है, यहाँ कुछ उपमा हैं:।

  • पृथ्वी
  • यूनिवर्स
  • तत्व ऑक्सीजन (वहाँ अन्य तत्व हैं, लेकिन केवल एक ऑक्सीजन ऑक्सीजन के अणु के बहुत सारे हैं, लेकिन केवल एक विहित ऑक्सीजन तत्व।)
  • सच
  • झूठी
0 की अवधारणा की अवधारणा

आप बहुत सारी सच्ची वस्तुओं को तुरंत चालू कर सकते हैं, लेकिन वे सभी एक ही वास्तविक वस्तु का संदर्भ लेंगे (यानी। सच की सार्वभौमिक अवधारणा)।अपने आवेदन के डोमेन के आधार पर, और अधिक विशिष्ट उदाहरण हो सकता है:

  • डेटाबेस कनेक्शन
  • आवेदन के मुख्य थ्रेड
  • कुछ भी है कि एक हार्डवेयर डिवाइस का प्रतिनिधित्व करता है (यानी आप केवल एक वस्तु का प्रतिनिधित्व CPU0 का दृष्टांत करना चाहते हैं) । जब आप है कि वहाँ एक और एक वर्ग का केवल एक ही उदाहरण है, और इस वस्तु कोड में कई स्थानों से पहुँचा जा होगा कि यकीन होना चाहिए
+2

मुझे यकीन नहीं है कि ऑक्सीजन की तुलना उचित है; एक दूसरे के समान कॉन्फ़िगरेशन वाले बहुत से अणु हैं, जिन्हें हम ऑक्सीजन के रूप में वर्गीकृत करते हैं, और वे सभी विशिष्ट अणु हैं जिन्हें एक-दूसरे से स्वतंत्र रूप से छेड़छाड़ की जा सकती है। – Rob

+14

रसायनज्ञ। उदार कला प्रमुख सार्वभौमिक के रूप में सत्य और गलत के उपयोग के बारे में शिकायत करेंगे। विज्ञान-फाई लोग शिकायत करेंगे कि मैं बहुमत से चूक गया। ओपी मेरा अर्थ मिला। :-) – runako

+0

मुझे डेटाबेस कनेक्शन के लिए निश्चित नहीं है, यह उल्लंघन करता है "क्या प्रत्येक एप्लिकेशन को इस कक्षा के केवल एक उदाहरण की आवश्यकता होगी?" मेरी पोस्ट से आप कई कनेक्शनों पर एक समय में एक से अधिक अनुरोध निष्पादित करना चाहेंगे। – Martin

18

एक सिंगलटन एक वर्ग है जिसमें आपके आवेदन में केवल एक उदाहरण हो सकता है। फिर आप उस उदाहरण को अपने पूरे एप्लिकेशन में साझा करते हैं।

Implementing the Singleton Pattern in C#

+0

तो क्या यह केवल पढ़ने-योग्य वर्ग के समान है? – madcolor

+0

नहीं। यह एक एकल-आवृत्ति वर्ग है, यानी यह स्मृति में केवल एक ही स्थान पर बनी रहती है, इससे कोई फर्क नहीं पड़ता कि इसे कौन कॉल करता है। –

+0

आह .. नेट में संदर्भ होगा। जैसा ही समान होगा? – madcolor

1

गूगल और विकिपीडिया, अपने सबसे अच्छे दोस्त:

http://en.wikipedia.org/wiki/Singleton_pattern

+3

पर एक लिंक पोस्ट करने के लिए @ जोन को हराया है एक और सबसे अच्छा दोस्त: स्टैक ओवरफ्लो पर उपयोगी लोग;) –

+1

सहमत हैं। पिछले छह महीनों की तुलना में पिछले छह महीनों में और जानें। –

0

यह लिंक है जिसे मदद कर सकता है (इसमें यह सब सी # में अपने सिंगलटन धागा सुरक्षित बनाने के लिए के रूप में अच्छी तरह से) है

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

+0

या शायद रोज़ाना अंग्रेजी में इसका उपयोग से? –

+0

@ नील: केवल एक प्रोग्रामर ऐसा कुछ कहेंगे ... –

13

सिंगलटन उपयोगी है।

यदि यह समझ में आ सकता है कि आपकी कक्षा के एक से अधिक उदाहरण एक बार में उपयोग किए जा सकते हैं, तो आप एक सिंगलटन नहीं चाहते हैं। जैसा कि पहले उल्लेख http://www.ibm.com/developerworks/webservices/library/co-single.html

लेख से::

यहाँ जहां एकमात्र उपयोग करने के लिए बारे में कुछ जानकारी है

है कि क्या एक वर्ग वास्तव में एक सिंगलटन है तय करने के लिए, आप अपने आप को कुछ सवाल पूछने चाहिए ।

  • क्या प्रत्येक एप्लिकेशन इस कक्षा का बिल्कुल उसी तरह उपयोग करेगा? (बिल्कुल मुख्य शब्द है)
  • क्या प्रत्येक एप्लिकेशन को कभी भी इस कक्षा के केवल एक उदाहरण की आवश्यकता होगी?
    (कभी और एक कुंजी शब्द हैं)
  • इस वर्ग के ग्राहकों के आवेदन के बारे में पता है कि वे की
    हिस्सा हैं होना चाहिए?

    यदि आप सभी तीन प्रश्नों के लिए हाँ का उत्तर देते हैं, तो आपको सिंगलटन मिला है। यहां मुख्य बिंदु हैं कि पर एक वर्ग केवल एक सिंगलटन है, सभी एप्लिकेशन इसे समान मानते हैं और यदि इसके ग्राहक बिना किसी संदर्भ संदर्भ के कक्षा का उपयोग कर सकते हैं।

+0

+1 एक और महत्वपूर्ण पहलू यह है कि आप कोड में कहीं से भी सिंगलटन को हवा से बाहर निकाल सकते हैं और एक ही वस्तु प्राप्त कर सकते हैं। इसलिए किसी भी फ़ंक्शन से एक ही वैश्विक सिंगलटन ऑब्जेक्ट के पॉइंटर/संदर्भ को कॉल करना आसान है - इसकी वजह से इसे अक्सर वैश्विक सेटिंग्स के लिए उपयोग किया जाता है। बस विशिष्टता के बारे में सोचना थोड़ा सीमित है, नाम सिंगलटन थोड़ा भ्रामक है। –

+0

समझाए जाने के लिए –

1

एक सिंगलटन एक वर्ग है, जो केवल बनाया एक उदाहरण हो सकता है है।

इसे अक्सर एक निजी कन्स्ट्रक्टर के द्वारा कार्यान्वित किया जाता है, जिसे स्थिर चर के लिए आवंटित किया जाता है, और फिर सार्वजनिक विधि के माध्यम से सुलभ किया जाता है।

  • वे परीक्षण करना मुश्किल
  • वे उप-वर्गीकृत
  • एक बार instantiated नहीं किया जा सकता है, उदाहरण के हमेशा के लिए जीना होगा

:

एकमात्र का उपयोग कर, सहित के साथ कुछ समस्याएं हैं सिंगलटन के एक और विवरण के लिए यहां देखें, और एक और पैटर्न 'मोनोस्टेट' जो इसके बदले उपयोगी हो सकता है: http://www.objectmentor.com/resources/articles/SingletonAndMonostate.pdf

0

सिंगलटन कभी कभी तो एक नहीं हो सकता है। यहां एक नज़र डालें: When a singleton is not a Singleton?, सूर्य द्वारा प्रदान किया गया लेख।

एक सिफारिश: इसका उपयोग न करें। यह सिर्फ अच्छा नहीं है, आपके आवेदन में गंभीर प्रदर्शन बाधा उत्पन्न कर सकता है, और सिंगलटन कक्षाओं का परीक्षण करने का प्रयास सिर्फ इसके लायक नहीं है।

ऊपर उल्लेख विकिपीडिया लेख से:

यह ध्यान दिया जाना चाहिए कि इस पैटर्न, के रूप में यह एक आवेदन में वैश्विक राज्य का परिचय इकाई परीक्षण कहीं अधिक कठिन बना देता है।

को देख लायक एक और संसाधन this post गूगल परीक्षण ब्लॉग पर है।

The Clean Code Talks - "Global State and Singletons"

वक्ता क्या वह Singletons कॉल के बीच एक अंतर बना देता है:

0

एक उत्कृष्ट गूगल टेक टॉक जहां वक्ता वैश्विक राज्य (Singletons सहित) को संबोधित किया और क्यों वे लगभग असंभव परीक्षण कर रही थी (पूंजी 'एस'), जहां कक्षा को एक से अधिक बार तत्काल होने से रोकने के लिए कदम उठाए जाते हैं (यानी, अक्सर एक स्थिर getInstance विधि और निजी रचनाकारों के साथ), और सिंगलेट्स (छोटे ') जहां एक भी उदाहरण है कभी भी जरूरी है, लेकिन बी से कई उदाहरणों को रोकने के लिए कक्षा में कुछ भी नहीं बनाया गया है ईिंग बनाया गया।

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