सिंगलटन पैटर्न: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(10 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Short description|Design pattern in object-oriented software development}}
{{Short description|Design pattern in object-oriented software development}}
[[File:Singleton UML class diagram.svg|thumb|सिंगलटन पैटर्न का उदाहरण देने वाला एक [[वर्ग आरेख]]।]][[सॉफ्टवेयर इंजीनियरिंग]] में, सिंगलटन पैटर्न [[सॉफ्टवेयर डिजाइन पैटर्न]] है जो [[ वर्ग (कंप्यूटर प्रोग्रामिंग) ]] के तात्कालिकता (कंप्यूटर साइंस) को विलक्षण उदाहरण तक सीमित करता है। प्रसिद्ध डिज़ाइन पैटर्न में से गैंग ऑफ़ फोर डिज़ाइन पैटर्न, जो वर्णन करता है कि [[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग ]] में आवर्ती समस्याओं का समाधान किया जाए।<ref name=":0" /> <ref name="GoF">{{cite book |author=Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides |url=https://archive.org/details/designpatternsel00gamm/page/127 |title=Design Patterns: Elements of Reusable Object-Oriented Software |publisher=Addison Wesley |year=1994 |isbn=0-201-63361-2 |pages=[https://archive.org/details/designpatternsel00gamm/page/127 127ff] |url-access=registration}}</ref> पैटर्न तब उपयोगी होता है जब किसी प्रणाली में क्रियाओं को समन्वित करने के लिए वास्तव में वस्तु की आवश्यकता होती है।
[[File:Singleton UML class diagram.svg|thumb|सिंगलटन पैटर्न का उदाहरण देने वाला [[वर्ग आरेख]]।]][[सॉफ्टवेयर इंजीनियरिंग]] में, '''सिंगलटन पैटर्न''' [[सॉफ्टवेयर डिजाइन पैटर्न]] है जो [[ वर्ग (कंप्यूटर प्रोग्रामिंग) ]] के तात्कालिकता (कंप्यूटर साइंस) को विलक्षण उदाहरण तक सीमित करता है। प्रसिद्ध डिज़ाइन पैटर्न में से गैंग ऑफ़ फोर डिज़ाइन पैटर्न, जो वर्णन करता है कि [[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग ]] में आवर्ती समस्याओं का समाधान किया जाए।<ref name=":0" /> <ref name="GoF">{{cite book |author=Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides |url=https://archive.org/details/designpatternsel00gamm/page/127 |title=Design Patterns: Elements of Reusable Object-Oriented Software |publisher=Addison Wesley |year=1994 |isbn=0-201-63361-2 |pages=[https://archive.org/details/designpatternsel00gamm/page/127 127ff] |url-access=registration}}</ref> पैटर्न तब उपयोगी होता है जब किसी प्रणाली में क्रियाओं को समन्वित करने के लिए वास्तव में वस्तु की आवश्यकता होती है।


अधिक विशेष रूप से, सिंगलटन पैटर्न वस्तुओं को अनुमति देता है।<ref name=":0">{{cite web |title=सिंगलटन डिज़ाइन पैटर्न - समस्या, समाधान और प्रयोज्यता|url=http://w3sdesign.com/?gr=c05&ugr=proble |access-date=2017-08-16 |website=w3sDesign.com}}</ref>
अधिक विशेष रूप से, सिंगलटन पैटर्न वस्तुओं को अनुमति देता है।<ref name=":0">{{cite web |title=सिंगलटन डिज़ाइन पैटर्न - समस्या, समाधान और प्रयोज्यता|url=http://w3sdesign.com/?gr=c05&ugr=proble |access-date=2017-08-16 |website=w3sDesign.com}}</ref>
* सुनिश्चित करें कि उनके पास केवल उदाहरण है।
* सुनिश्चित करें कि उनके पास केवल उदाहरण है।
* उस उदाहरण के लिए सरल पहुँच प्रदान करें।
* उस उदाहरण के लिए सरल पहुँच प्रदान करें।
* उनकी तात्कालिकता को नियंत्रित करें (उदाहरण के लिए, कक्ष (कंप्यूटर प्रोग्रामिंग) के [[कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] को छिपाना)।
* उनकी तात्कालिकता को नियंत्रित करें (उदाहरण के लिए, कक्ष (कंप्यूटर प्रोग्रामिंग) के [[कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)|निर्माणकर्ता (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] को छिपाना)।


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


== सामान्य उपयोग ==
== सामान्य उपयोग ==
सिंगलटन को अक्सर वैश्विक चर के लिए पसंद किया जाता है क्योंकि वे वैश्विक [[नाम स्थान]] (या उनके नाम स्थान) को प्रदूषित नहीं करते हैं। इसके अतिरिक्त, वे [[आलसी मूल्यांकन]] आवंटन और आरंभीकरण की अनुमति देते हैं, जबकि कई भाषाओं में वैश्विक चर हमेशा संसाधनों का उपभोग करेंगे।<ref name="GoF" /><ref name="devin">{{cite news |last1=Soni |first1=Devin |date=31 July 2019 |title=What Is a Singleton? |work=BetterProgramming |url=https://betterprogramming.pub/what-is-a-singleton-2dc38ca08e92 |access-date=28 August 2021}}</ref>
सिंगलटन को प्रायः वैश्विक चर के लिए सदृश किया जाता है, क्योंकि वे वैश्विक [[नाम स्थान]] (या उनके नाम स्थान) को प्रदूषित नहीं करते हैं। इसके अतिरिक्त, वे [[आलसी मूल्यांकन|मंद मूल्यांकन]] आवंटन और आरंभीकरण की अनुमति देते हैं, जबकि कई भाषाओं में वैश्विक चर सदैव संसाधनों का उपभोग करेंगे।<ref name="GoF" /><ref name="devin">{{cite news |last1=Soni |first1=Devin |date=31 July 2019 |title=What Is a Singleton? |work=BetterProgramming |url=https://betterprogramming.pub/what-is-a-singleton-2dc38ca08e92 |access-date=28 August 2021}}</ref> सिंगलटन पैटर्न का उपयोग अन्य डिज़ाइन पैटर्न के आधार के रूप में भी किया जा सकता है, जैसे कि सार फ़ैक्टरी पैटर्न, [[फैक्टरी विधि पैटर्न]], [[बिल्डर पैटर्न]] और [[प्रोटोटाइप पैटर्न]] है। [[मुखौटा पैटर्न|मुखौटा वस्तुएं]] भी प्रायः सिंगलटन होते हैं क्योंकि केवल एकल मुखौटा वस्तु की आवश्यकता होती है।
सिंगलटन पैटर्न का उपयोग अन्य डिज़ाइन पैटर्न के आधार के रूप में भी किया जा सकता है, जैसे कि सार फ़ैक्टरी पैटर्न, [[फैक्टरी विधि पैटर्न]], [[बिल्डर पैटर्न]] और [[प्रोटोटाइप पैटर्न]] पैटर्न। [[मुखौटा पैटर्न]] ऑब्जेक्ट भी अक्सर सिंगलटन होते हैं क्योंकि केवल एक मुखौटा वस्तु की आवश्यकता होती है।


[[बोटा दस्तावेज]] सिंगलटन के लिए एक सामान्य वास्तविक दुनिया का उपयोग मामला है, क्योंकि सभी ऑब्जेक्ट जो संदेशों को लॉग करना चाहते हैं, उन्हें एक समान पहुंच बिंदु की आवश्यकता होती है और वैचारिक रूप से एक ही स्रोत को लिखते हैं।<ref name="rainsberger">{{cite news |last1=Rainsberger |first1=J.B. |title=अपने सिंगलटन का बुद्धिमानी से उपयोग करें|url=https://www.ibm.com/developerworks/library/co-single/ |access-date=28 August 2021 |publisher=IBM |date=1 July 2001 |archive-url=https://web.archive.org/web/20210224180356/https://www.ibm.com/developerworks/library/co-single/ |archive-date=24 February 2021}}</ref>
सिंगलटन के लिए सामान्य वास्तविक दुनिया का उपयोग विषय है, क्योंकि सभी ऑब्जेक्ट जो संदेशों को लॉग करना चाहते हैं, उन्हें समान पहुंच बिंदु की आवश्यकता होती है और वैचारिक रूप से स्रोत को लिखते हैं।<ref name="rainsberger">{{cite news |last1=Rainsberger |first1=J.B. |title=अपने सिंगलटन का बुद्धिमानी से उपयोग करें|url=https://www.ibm.com/developerworks/library/co-single/ |access-date=28 August 2021 |publisher=IBM |date=1 July 2001 |archive-url=https://web.archive.org/web/20210224180356/https://www.ibm.com/developerworks/library/co-single/ |archive-date=24 February 2021}}</ref>




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


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


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


<syntaxhighlight lang="Cpp">
<syntaxhighlight lang="Cpp">
Line 65: Line 64:
}
}
</syntaxhighlight>
</syntaxhighlight>
प्रोग्राम आउटपुट है
प्रोग्राम आउटपुट है,


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


यह मेयर्स सिंगलटन का कार्यान्वयन है<ref>{{cite book |author=Scott Meyers |title=अधिक प्रभावी सी ++|publisher=Addison Wesley |year=1997 |isbn=0-201-63371-X |pages= 146 ff}}</ref> सी ++ 11 में। मेयर्स सिंगलटन की कोई विनाशकारी विधि नहीं है। कार्यक्रम का आउटपुट ऊपर जैसा है।
यह मेयर्स सिंगलटन का कार्यान्वयन है<ref>{{cite book |author=Scott Meyers |title=अधिक प्रभावी सी ++|publisher=Addison Wesley |year=1997 |isbn=0-201-63371-X |pages= 146 ff}}</ref> C ++ 11 में मेयर्स सिंगलटन की कोई विनाशकारी विधि नहीं है। कार्यक्रम का आउटपुट ऊपर जैसा है।


<syntaxhighlight lang="Cpp">
<syntaxhighlight lang="Cpp">
Line 101: Line 98:




=== [[आलसी आरंभीकरण]] ===
=== मंद आरंभीकरण ===


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


<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
Line 128: Line 125:


== आलोचना ==
== आलोचना ==
कुछ लोग सिंगलटन को एक एंटी-पैटर्न मानते हैं जो अक्सर अनावश्यक रूप से एक अनुप्रयोग में वैश्विक चर का परिचय देता है। यह अन्य वस्तुओं द्वारा सिंगलटन पर संभावित निर्भरता का परिचय देता है, यह निर्धारित करने के लिए कार्यान्वयन विवरण के विश्लेषण की आवश्यकता होती है कि निर्भरता वास्तव में मौजूद है या नहीं।<ref name="google">{{cite web |title=सिंगलटन विवादास्पद क्यों हैं|url=https://code.google.com/archive/p/google-singleton-detector/wikis/WhySingletonsAreControversial.wiki |archive-url=https://web.archive.org/web/20210506162753/https://code.google.com/archive/p/google-singleton-detector/wikis/WhySingletonsAreControversial.wiki |archive-date=6 May 2021 |access-date=28 August 2021 |website=Google Code Archive}}</ref> यह बढ़ा हुआ [[युग्मन (कंप्यूटर प्रोग्रामिंग)]] इकाई परीक्षण के साथ कठिनाइयों का परिचय दे सकता है।<ref name="button">{{cite news |last1=Button |first1=Brian |date=25 May 2004 |title=सिंगलटन ईविल क्यों हैं|work=Being Scott Densmore |publisher=Microsoft |url=https://docs.microsoft.com/en-us/archive/blogs/scottdensmore/why-singletons-are-evil |access-date=28 August 2021 |archive-url=https://web.archive.org/web/20210715184717/https://docs.microsoft.com/en-us/archive/blogs/scottdensmore/why-singletons-are-evil |archive-date=15 July 2021}}</ref> बदले में, यह सिंगलटन का उपयोग करने वाले किसी भी अमूर्तता पर प्रतिबंध लगाता है, जैसे कि Concurrency_(कंप्यूटर_साइंस) को कई उदाहरणों के उपयोग से रोकना।<ref name="button" /><ref>Steve Yegge. [http://steve.yegge.googlepages.com/singleton-considered-stupid Singletons considered stupid], September 2004</ref><ref name="googletesting.blogspot.com">Hevery, Miško, "[http://googletesting.blogspot.com/2008/11/clean-code-talks-global-state-and.html Global State and Singletons]", ''Clean Code Talks'', 21 November 2008.</ref>
कुछ लोग सिंगलटन को विरोधी-पैटर्न मानते हैं जो प्रायः अनावश्यक रूप से अनुप्रयोग में वैश्विक चर का परिचय देता है। यह अन्य वस्तुओं द्वारा सिंगलटन पर संभावित निर्भरता का परिचय देता है, यह निर्धारित करने के लिए कार्यान्वयन विवरण के विश्लेषण की आवश्यकता होती है कि निर्भरता वास्तव में उपस्थित है या नहीं है ।<ref name="google">{{cite web |title=सिंगलटन विवादास्पद क्यों हैं|url=https://code.google.com/archive/p/google-singleton-detector/wikis/WhySingletonsAreControversial.wiki |archive-url=https://web.archive.org/web/20210506162753/https://code.google.com/archive/p/google-singleton-detector/wikis/WhySingletonsAreControversial.wiki |archive-date=6 May 2021 |access-date=28 August 2021 |website=Google Code Archive}}</ref> यह बढ़ा हुआ [[युग्मन (कंप्यूटर प्रोग्रामिंग)]] इकाई परीक्षण के साथ कठिनाइयों का परिचय दे सकता है।<ref name="button">{{cite news |last1=Button |first1=Brian |date=25 May 2004 |title=सिंगलटन ईविल क्यों हैं|work=Being Scott Densmore |publisher=Microsoft |url=https://docs.microsoft.com/en-us/archive/blogs/scottdensmore/why-singletons-are-evil |access-date=28 August 2021 |archive-url=https://web.archive.org/web/20210715184717/https://docs.microsoft.com/en-us/archive/blogs/scottdensmore/why-singletons-are-evil |archive-date=15 July 2021}}</ref> परिवर्तन में, यह सिंगलटन का उपयोग करने वाले किसी भी अमूर्तता पर प्रतिबंध लगाता है, जैसे कि कई उदाहरणों के समवर्ती उपयोग को रोकना।<ref name="button" /><ref>Steve Yegge. [http://steve.yegge.googlepages.com/singleton-considered-stupid Singletons considered stupid], September 2004</ref><ref name="googletesting.blogspot.com">Hevery, Miško, "[http://googletesting.blogspot.com/2008/11/clean-code-talks-global-state-and.html Global State and Singletons]", ''Clean Code Talks'', 21 November 2008.</ref> सिंगलटन [[एकल-जिम्मेदारी सिद्धांत|एकल-उत्तरदायी सिद्धांत]] का भी उल्लंघन करते हैं क्योंकि वे स्वयं सामान्य कार्यों को करने के साथ-साथ स्वयं की विशिष्टता को प्रारम्भ करने के लिए उत्तरदायी होते हैं।<ref name="button" />
सिंगलटन [[एकल-जिम्मेदारी सिद्धांत]] का भी उल्लंघन करते हैं क्योंकि वे अपने सामान्य कार्यों को करने के साथ-साथ अपनी विशिष्टता को लागू करने के लिए जिम्मेदार होते हैं।<ref name="button" />




Line 142: Line 138:


== बाहरी संबंध ==
== बाहरी संबंध ==
{{external links|date=November 2016}}
{{wikibooks|Computer Science/Design Patterns|Singleton|Singleton implementations in various languages}}
{{commons category}}
* Complete article "[https://howtodoinjava.com/design-patterns/creational/singleton-design-pattern-in-java/ Java Singleton Pattern Explained]"  
* Complete article "[https://howtodoinjava.com/design-patterns/creational/singleton-design-pattern-in-java/ Java Singleton Pattern Explained]"  
* Four different ways to implement singleton in Java "[https://web.archive.org/web/20150709155148/http://www.javaexperience.com/design-patterns-singleton-design-pattern/ Ways to implement singleton in Java]"  
* Four different ways to implement singleton in Java "[https://web.archive.org/web/20150709155148/http://www.javaexperience.com/design-patterns-singleton-design-pattern/ Ways to implement singleton in Java]"  
Line 153: Line 146:
* [https://code.google.com/archive/p/google-singleton-detector/ Google Singleton Detector] (analyzes [[Java bytecode]] to detect singletons)
* [https://code.google.com/archive/p/google-singleton-detector/ Google Singleton Detector] (analyzes [[Java bytecode]] to detect singletons)


{{Design Patterns Patterns}}
{{DEFAULTSORT:Singleton Pattern}}


{{DEFAULTSORT:Singleton Pattern}}[[Category: सॉफ्टवेयर डिजाइन पैटर्न]] [[Category: विरोधी पैटर्न]] [[Category: जावा कोड उदाहरण के साथ लेख]]  
[[Category:Articles with invalid date parameter in template|Singleton Pattern]]
 
[[Category:CS1 maint]]
 
[[Category:Collapse templates|Singleton Pattern]]
 
[[Category:Commons category link from Wikidata|Singleton Pattern]]
[[Category: Machine Translated Page]]
[[Category:Created On 15/05/2023|Singleton Pattern]]
[[Category:Created On 15/05/2023]]
[[Category:Lua-based templates|Singleton Pattern]]
[[Category:Machine Translated Page|Singleton Pattern]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|Singleton Pattern]]
[[Category:Pages with script errors|Singleton Pattern]]
[[Category:Sidebars with styles needing conversion|Singleton Pattern]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready|Singleton Pattern]]
[[Category:Templates generating microformats|Singleton Pattern]]
[[Category:Templates that add a tracking category|Singleton Pattern]]
[[Category:Templates that are not mobile friendly|Singleton Pattern]]
[[Category:Templates that generate short descriptions|Singleton Pattern]]
[[Category:Templates using TemplateData|Singleton Pattern]]
[[Category:Wikipedia external links cleanup from November 2016|Singleton Pattern]]
[[Category:Wikipedia metatemplates|Singleton Pattern]]
[[Category:Wikipedia spam cleanup from November 2016|Singleton Pattern]]
[[Category:जावा कोड उदाहरण के साथ लेख|Singleton Pattern]]
[[Category:विरोधी पैटर्न|Singleton Pattern]]
[[Category:सॉफ्टवेयर डिजाइन पैटर्न|Singleton Pattern]]

Latest revision as of 16:30, 30 October 2023

सिंगलटन पैटर्न का उदाहरण देने वाला वर्ग आरेख

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

अधिक विशेष रूप से, सिंगलटन पैटर्न वस्तुओं को अनुमति देता है।[1]

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

सामान्य उपयोग

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

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


कार्यान्वयन

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

सामान्यतः, यह इसके द्वारा पूर्ण किया जाता है।

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

उदाहरण सामान्यतः निजी स्थैतिक चर के रूप में संग्रहीत किया जाता है; उदाहरण तब बनाया जाता है जब चर को आरंभीकृत किया जाता है, कुछ समय पूर्व जब स्थैतिक विधि का प्रथम बार आह्वान किया जाता है।

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

#include <iostream>

class Singleton {
public:
  // defines an class operation that lets clients access its unique instance.
  static Singleton& get() {
    // may be responsible for creating its own unique instance.
    if (nullptr == instance) instance = new Singleton;
    return *instance;
  }
  Singleton(const Singleton&) = delete; // rule of three
  Singleton& operator=(const Singleton&) = delete;
  static void destruct() {
    delete instance;
    instance = nullptr;
  }
  // existing interface goes here
  int getValue() {
    return value;
  }
  void setValue(int value_) {
    value = value_;
  }
private:
  Singleton() = default; // no public constructor
  ~Singleton() = default; // no public destructor
  static Singleton* instance; // declaration class variable
  int value;
};

Singleton* Singleton::instance = nullptr; // definition class variable

int main() {
  Singleton::get().setValue(42);
  std::cout << "value=" << Singleton::get().getValue() << '\n';
  Singleton::destruct();
}

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

value=42

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

#include <iostream>

class Singleton {
public:
  static Singleton& get() {
    static Singleton instance;
    return instance;
  }
  int getValue() {
    return value;
  }
  void setValue(int value_) {
    value = value_;
  }
private:
  Singleton() = default;
  ~Singleton() = default;
  int value;
};

int main() {
  Singleton::get().setValue(42);
  std::cout << "value=" << Singleton::get().getValue() << '\n';
}


मंद आरंभीकरण

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

public class Singleton {

    private static volatile Singleton instance = null;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized(Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }

        return instance;
    }
}


आलोचना

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


यह भी देखें

संदर्भ

  1. 1.0 1.1 "सिंगलटन डिज़ाइन पैटर्न - समस्या, समाधान और प्रयोज्यता". w3sDesign.com. Retrieved 2017-08-16.
  2. 2.0 2.1 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley. pp. 127ff. ISBN 0-201-63361-2.{{cite book}}: CS1 maint: multiple names: authors list (link)
  3. Soni, Devin (31 July 2019). "What Is a Singleton?". BetterProgramming. Retrieved 28 August 2021.
  4. Rainsberger, J.B. (1 July 2001). "अपने सिंगलटन का बुद्धिमानी से उपयोग करें". IBM. Archived from the original on 24 February 2021. Retrieved 28 August 2021.
  5. Scott Meyers (1997). अधिक प्रभावी सी ++. Addison Wesley. pp. 146 ff. ISBN 0-201-63371-X.
  6. "सिंगलटन विवादास्पद क्यों हैं". Google Code Archive. Archived from the original on 6 May 2021. Retrieved 28 August 2021.
  7. 7.0 7.1 7.2 Button, Brian (25 May 2004). "सिंगलटन ईविल क्यों हैं". Being Scott Densmore. Microsoft. Archived from the original on 15 July 2021. Retrieved 28 August 2021.
  8. Steve Yegge. Singletons considered stupid, September 2004
  9. Hevery, Miško, "Global State and Singletons", Clean Code Talks, 21 November 2008.


बाहरी संबंध