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

From Vigyanwiki
No edit summary
No edit summary
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 128: Line 128:


== आलोचना ==
== आलोचना ==
कुछ लोग सिंगलटन को एक एंटी-पैटर्न मानते हैं जो अक्सर अनावश्यक रूप से एक अनुप्रयोग में वैश्विक चर का परिचय देता है। यह अन्य वस्तुओं द्वारा सिंगलटन पर संभावित निर्भरता का परिचय देता है, यह निर्धारित करने के लिए कार्यान्वयन विवरण के विश्लेषण की आवश्यकता होती है कि निर्भरता वास्तव में मौजूद है या नहीं।<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> बदले में, यह सिंगलटन का उपयोग करने वाले किसी भी अमूर्तता पर प्रतिबंध लगाता है, जैसे कि 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="button" />
सिंगलटन [[एकल-जिम्मेदारी सिद्धांत]] का भी उल्लंघन करते हैं क्योंकि वे अपने सामान्य कार्यों को करने के साथ-साथ अपनी विशिष्टता को लागू करने के लिए जिम्मेदार होते हैं।<ref name="button" />



Revision as of 13:19, 26 May 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();
}

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

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

यह मेयर्स सिंगलटन का कार्यान्वयन है[5] सी ++ 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] बदले में, यह सिंगलटन का उपयोग करने वाले किसी भी अमूर्तता पर प्रतिबंध लगाता है, जैसे कि Concurrency_(कंप्यूटर_साइंस) को कई उदाहरणों के उपयोग से रोकना।[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.


बाहरी संबंध