सिंगलटन पैटर्न

सॉफ्टवेयर इंजीनियरिंग में, सिंगलटन पैटर्न सॉफ्टवेयर डिजाइन पैटर्न है जो वर्ग (कंप्यूटर प्रोग्रामिंग)  के तात्कालिकता (कंप्यूटर साइंस) को विलक्षण उदाहरण तक सीमित करता है। प्रसिद्ध डिज़ाइन पैटर्न में से गैंग ऑफ़ फोर डिज़ाइन पैटर्न, जो वर्णन करता है कि  ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग  में आवर्ती समस्याओं का समाधान किया जाए। पैटर्न तब उपयोगी होता है जब किसी प्रणाली में क्रियाओं को समन्वित करने के लिए वास्तव में वस्तु की आवश्यकता होती है।

अधिक विशेष रूप से, सिंगलटन पैटर्न वस्तुओं को अनुमति देता है।
 * सुनिश्चित करें कि उनके पास केवल उदाहरण है।
 * उस उदाहरण के लिए सरल पहुँच प्रदान करें।
 * उनकी तात्कालिकता को नियंत्रित करें (उदाहरण के लिए, कक्ष (कंप्यूटर प्रोग्रामिंग) के निर्माणकर्ता (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) को छिपाना)।

शब्द सिंगलटन (गणित) से आता है।

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

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

कार्यान्वयन
सिंगलटन पैटर्न के कार्यान्वयन से यह सुनिश्चित होता है, कि सिंगलटन वर्ग का उदाहरण उपस्थित है और सामान्यतः उस उदाहरण के लिए वैश्विक पहुंच प्रदान करता है।

सामान्यतः, यह इसके द्वारा पूर्ण किया जाता है। उदाहरण सामान्यतः निजी स्थैतिक चर के रूप में संग्रहीत किया जाता है; उदाहरण तब बनाया जाता है जब चर को आरंभीकृत किया जाता है, कुछ समय पूर्व जब स्थैतिक विधि का प्रथम बार आह्वान किया जाता है।
 * कक्षा के सभी निर्माणकर्ता (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) को निजी सदस्य घोषित करना, जो इसे अन्य वस्तुओं द्वारा त्वरित होने से रोकता है।
 * स्थिर विधि प्रदान करना जो उदाहरण के लिए संदर्भ (कंप्यूटर विज्ञान) लौटाता है।

यह C++11 कार्यान्वयन पुस्तक में पूर्व C++98 कार्यान्वयन पर आधारित होता है।

प्रोग्राम आउटपुट है,

value=42

यह मेयर्स सिंगलटन का कार्यान्वयन है C ++ 11 में मेयर्स सिंगलटन की कोई विनाशकारी विधि नहीं है। कार्यक्रम का आउटपुट ऊपर जैसा है।

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

आलोचना
कुछ लोग सिंगलटन को विरोधी-पैटर्न मानते हैं जो प्रायः अनावश्यक रूप से अनुप्रयोग में वैश्विक चर का परिचय देता है। यह अन्य वस्तुओं द्वारा सिंगलटन पर संभावित निर्भरता का परिचय देता है, यह निर्धारित करने के लिए कार्यान्वयन विवरण के विश्लेषण की आवश्यकता होती है कि निर्भरता वास्तव में उपस्थित है या नहीं है । यह बढ़ा हुआ युग्मन (कंप्यूटर प्रोग्रामिंग) इकाई परीक्षण के साथ कठिनाइयों का परिचय दे सकता है। परिवर्तन में, यह सिंगलटन का उपयोग करने वाले किसी भी अमूर्तता पर प्रतिबंध लगाता है, जैसे कि कई उदाहरणों के समवर्ती उपयोग को रोकना। सिंगलटन एकल-उत्तरदायी सिद्धांत का भी उल्लंघन करते हैं क्योंकि वे स्वयं सामान्य कार्यों को करने के साथ-साथ स्वयं की विशिष्टता को प्रारम्भ करने के लिए उत्तरदायी होते हैं।

यह भी देखें

 * इनिशियलाइज़ेशन-ऑन-डिमांड होल्डर मुहावरा
 * मल्टीटन पैटर्न
 * सॉफ्टवेयर डिजाइन पैटर्न

बाहरी संबंध

 * Complete article "Java Singleton Pattern Explained"
 * Four different ways to implement singleton in Java "Ways to implement singleton in Java"
 * Book extract: Implementing the Singleton Pattern in C# by Jon Skeet
 * Singleton at Microsoft patterns & practices Developer Center
 * IBM article "Double-checked locking and the Singleton pattern" by Peter Haggar
 * Google Singleton Detector (analyzes Java bytecode to detect singletons)
 * Google Singleton Detector (analyzes Java bytecode to detect singletons)