सिंगलटन डिज़ाइन पैटर्न सॉफ्टवेयर प्रोग्रामिंग में सबसे महत्वपूर्ण और अक्सर उपयोग किया जाने वाला पैटर्न है। यह सुनिश्चित करता है कि एप्लिकेशन रनटाइम के दौरान एक क्लास के पास केवल एक ही इंस्टेंस हो और उस इंस्टेंस के लिए एक वैश्विक पहुंच बिंदु प्रदान करता है। इस लेख में, हम सिंगलटन के महत्व पर चर्चा करेंगे, इसे गोलांग में कैसे लागू किया जाए, और इससे होने वाले लाभ, विशेष रूप से समवर्ती वातावरण में।
सिंगलटन एक डिज़ाइन पैटर्न है जो एक वर्ग के उदाहरण को एक ही उदाहरण तक सीमित करता है। यह उन स्थितियों में विशेष रूप से उपयोगी है जहां नियंत्रण के एक बिंदु या एकल साझा संसाधन की आवश्यकता होती है, जैसे:
मैं पैटर्न से कार्यान्वयन के बारे में कुछ बिंदुओं को सूचीबद्ध करने जा रहा हूं जो अधिक समझ में आते हैं और यह भी दिखाते हैं कि सब कुछ अच्छा नहीं है, इसके साथ हमें कुछ समस्याएं हो सकती हैं।
सिंगलटन लागू करने के लिए मैं गोलांग का उपयोग करूंगा। इस भाषा में हमें यह सुनिश्चित करने के लिए समवर्तीता पर विशेष ध्यान देना होगा कि केवल एक ही उदाहरण बनाया जाए, तब भी जब कई गोरोइन एक साथ उदाहरण तक पहुंचने का प्रयास करते हैं।
अपने उदाहरण को वास्तविक दुनिया के करीब लाने के लिए, आइए अपने एप्लिकेशन के लिए एक लॉगर बनाएं। लॉगर अनुप्रयोगों में एक सामान्य उपकरण है जिसे लॉग स्थिरता सुनिश्चित करने के लिए अद्वितीय होना आवश्यक है।
सबसे पहले, हम उस संरचना को परिभाषित करते हैं जिसके लिए हम एक एकल उदाहरण चाहते हैं।
package logger import ( "fmt" "sync" ) type Logger struct {} var loggerInstance *Logger
न्यूइंस्टेंस फ़ंक्शन सिंगलटन संरचना के एकल उदाहरण को वापस करने के लिए जिम्मेदार है। हम समवर्ती वातावरण में सुरक्षा सुनिश्चित करने के लिए म्यूटेक्स का उपयोग करते हैं, दक्षता के लिए डबल-चेक लॉकिंग लागू करते हैं।
package logger import ( "fmt" "sync" ) type Logger struct{} var logger *Logger var mtx = &sync.Mutex{} func NewInstance() *Logger { if logger == nil { mtx.Lock() defer mtx.Unlock() if logger == nil { fmt.Println("Creating new Logger") logger = &Logger{} } } else { fmt.Println("Logger already created") } return logger }
लॉग टूल में हमेशा कुछ लॉग प्रकार होते हैं, जैसे जानकारी दिखाने के लिए जानकारी, त्रुटियां दिखाने के लिए त्रुटि इत्यादि। यह उस प्रकार की जानकारी को फ़िल्टर करने का भी एक तरीका है जिसे हम अपने एप्लिकेशन में दिखाना चाहते हैं।
तो आइए एक विधि बनाएं जो हमारे लॉग को जानकारी प्रकार के साथ दिखाएगी। ऐसा करने के लिए हम एक फ़ंक्शन बनाएंगे जो हमारा लॉग संदेश प्राप्त करेगा और इसे INFO प्रारूप में प्रारूपित करेगा।
package logger import ( "fmt" "sync" "time" ) const ( INFO string = "INFO" ) type Logger struct{} var logger *Logger var mtx = &sync.Mutex{} func NewInstance() *Logger { if logger == nil { mtx.Lock() defer mtx.Unlock() if logger == nil { fmt.Println("Creating new logger") logger = &Logger{} } } else { fmt.Println("Logger already created") } return logger } func (l *Logger) Info(message string) { fmt.Printf("%s - %s: %s\n", time.Now().UTC().Format(time.RFC3339Nano), INFO, message) }
और अपने नए लॉगर का उपयोग करने के लिए, हम इसे अपने मुख्य पैकेज के भीतर इंस्टेंट करेंगे और यह देखने के लिए एक लॉग बनाएंगे कि यह कार्यान्वयन कैसे काम करता है।
package main import ( "playground-go/pkg/logger" ) func main() { log := logger.NewInstance() log.Info("This is an example of log") }
जब हम प्रोग्राम चलाते हैं तो यह परिणाम होता है:
Creating new logger 2024-07-03T19:34:57.609599Z - INFO: This is an example of log
अगर हम यह परीक्षण करना चाहते हैं कि क्या न्यूइंस्टेंस वास्तव में गारंटी दे रहा है कि हमारे पास केवल एक ही इंस्टेंस चलेगा, तो हम निम्नलिखित परीक्षण कर सकते हैं।
package main import ( "fmt" "playground-go/pkg/logger" ) func main() { log := logger.NewInstance() log.Info("This is an example of log") log2 := logger.NewInstance() log2.Info("This is another example of log") if log == log2 { fmt.Println("same instance") } else { fmt.Println("different instance") } }
हमारे लॉग बदल गए हैं और अब हम देख सकते हैं कि हमने एक नए उदाहरण के निर्माण को अवरुद्ध कर दिया है:
Creating new logger 2024-07-03T19:45:19.603783Z - INFO: This is an example of log Logger already created 2024-07-03T19:45:19.603793Z - INFO: This is another example of log same instance
सिंगलटन पैटर्न यह सुनिश्चित करने के लिए एक शक्तिशाली उपकरण है कि एप्लिकेशन रनटाइम के दौरान किसी विशिष्ट वर्ग का केवल एक उदाहरण मौजूद है। लॉगर उदाहरण में, हमने देखा कि पूरे एप्लिकेशन में लॉग स्थिरता सुनिश्चित करने के लिए इस पैटर्न को कैसे लागू किया जा सकता है।
आशा है कि इससे आपको गोलांग में सिंगलटन को बेहतर ढंग से समझने में मदद मिलेगी।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3