सिंगलटन पैटर्न: Difference between revisions
No edit summary |
No edit summary |
||
(6 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|सिंगलटन पैटर्न का उदाहरण देने वाला | [[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> | ||
Line 10: | Line 10: | ||
== सामान्य उपयोग == | == सामान्य उपयोग == | ||
सिंगलटन को प्रायः वैश्विक चर के लिए सदृश किया जाता है, क्योंकि वे वैश्विक [[नाम स्थान]] (या उनके नाम स्थान) को प्रदूषित नहीं करते हैं। इसके अतिरिक्त, वे [[आलसी मूल्यांकन]] आवंटन और आरंभीकरण की अनुमति देते हैं, जबकि कई भाषाओं में वैश्विक चर सदैव संसाधनों का उपभोग करेंगे।<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> | ||
Line 64: | Line 64: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
प्रोग्राम आउटपुट है | प्रोग्राम आउटपुट है, | ||
value=42 | |||
यह मेयर्स सिंगलटन का कार्यान्वयन है<ref>{{cite book |author=Scott Meyers |title=अधिक प्रभावी सी ++|publisher=Addison Wesley |year=1997 |isbn=0-201-63371-X |pages= 146 ff}}</ref> | यह मेयर्स सिंगलटन का कार्यान्वयन है<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 100: | Line 98: | ||
=== | === मंद आरंभीकरण === | ||
सिंगलटन कार्यान्वयन मंद आरंभीकरण का उपयोग कर सकता है, जिसमें स्टैटिक विधि को प्रथम बार प्रारम्भ किए जाने पर उदाहरण बनाया जाता है। [[मल्टीथ्रेडिंग (सॉफ्टवेयर)|बहुप्रचारित कार्यक्रमों (सॉफ्टवेयर)]] में, यह [[दौड़ की स्थिति]] उत्पन्न कर सकता है जिसके परिणामस्वरूप कई उदाहरण बनते हैं। निम्नलिखित जावा उदाहरण [[थ्रेड सुरक्षा]] है। थ्रेड-सुरक्षित कार्यान्वयन, [[डबल-चेक लॉकिंग]] के साथ मंद प्रारंभिकरण का उपयोग कर रहा है। | |||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
Line 127: | 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> परिवर्तन में, यह सिंगलटन का उपयोग करने वाले किसी भी अमूर्तता पर प्रतिबंध लगाता है, जैसे कि कई उदाहरणों के समवर्ती उपयोग को रोकना।<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" /> | ||
सिंगलटन [[एकल-जिम्मेदारी सिद्धांत]] का भी उल्लंघन करते हैं क्योंकि वे | |||
Line 141: | Line 138: | ||
== बाहरी संबंध == | == बाहरी संबंध == | ||
* 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 152: | 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) | ||
{{ | {{DEFAULTSORT:Singleton Pattern}} | ||
[[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: | [[Category:Created On 15/05/2023|Singleton Pattern]] | ||
[[Category: | [[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.0 1.1 "सिंगलटन डिज़ाइन पैटर्न - समस्या, समाधान और प्रयोज्यता". w3sDesign.com. Retrieved 2017-08-16.
- ↑ 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) - ↑ Soni, Devin (31 July 2019). "What Is a Singleton?". BetterProgramming. Retrieved 28 August 2021.
- ↑ Rainsberger, J.B. (1 July 2001). "अपने सिंगलटन का बुद्धिमानी से उपयोग करें". IBM. Archived from the original on 24 February 2021. Retrieved 28 August 2021.
- ↑ Scott Meyers (1997). अधिक प्रभावी सी ++. Addison Wesley. pp. 146 ff. ISBN 0-201-63371-X.
- ↑ "सिंगलटन विवादास्पद क्यों हैं". Google Code Archive. Archived from the original on 6 May 2021. Retrieved 28 August 2021.
- ↑ Steve Yegge. Singletons considered stupid, September 2004
- ↑ Hevery, Miško, "Global State and Singletons", Clean Code Talks, 21 November 2008.
बाहरी संबंध
- 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
- Geary, David (April 25, 2003). "How to navigate the deceptively simple Singleton pattern". Java Design Patterns. JavaWorld. Retrieved 2020-07-21.
- Google Singleton Detector (analyzes Java bytecode to detect singletons)