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

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

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

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

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

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

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

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

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

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

<वाक्यविन्यास प्रकाश लैंग = सी ++> मान = 42 

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

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

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

यह भी देखें

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

बाहरी संबंध

 * 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)