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