सिंगलटन पैटर्न सरल डिज़ाइन पैटर्न में से एक है। एक वर्ग जो सिंगलटन डिज़ाइन पैटर्न का उपयोग करता है, उसके पास एक ही उदाहरण होता है जिसे वह स्वयं प्रबंधित करता है। यह वर्ग किसी अन्य वर्ग को इसका उदाहरण बनाने से रोकता है।
एक सिंगलटन वर्ग अपने द्वारा बनाए गए उदाहरण के लिए एक एकल वैश्विक पहुँच बिंदु भी प्रदान करता है। इसलिए, कोई भी वर्ग जो सिंगलटन क्लास का उदाहरण चाहता है, उसे अपने सिंगल एक्सेस पॉइंट के माध्यम से इसे एक्सेस करने की आवश्यकता है।
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के लिए जावा का उत्कृष्ट समर्थन सिंगलटन डिज़ाइन पैटर्न का उपयोग करना आसान बनाता है।
जावा का उपयोग करके सिंगलटन पैटर्न को लागू करना
जावा में सिंगलटन पैटर्न को लागू करने के कई तरीके हैं; उत्सुक और आलसी दृष्टिकोण सामान्य रूपांतर हैं। इनमें से प्रत्येक दृष्टिकोण के अपने गुण और कमियां हैं। इसलिए, आपके द्वारा नियोजित करने के लिए चुनी गई विधि इस बात पर निर्भर होनी चाहिए कि आपका आवेदन कैसे संचालित होगा।
उत्सुक दृष्टिकोण
उत्सुक दृष्टिकोण के साथ सिंगलटन पैटर्न को कार्यान्वित करने का अर्थ है कि वर्ग लोड होने पर स्वयं का एक नया उदाहरण बनाता है।
जनताकक्षाउत्सुक सिंगलटन{
निजीस्थिर EagerSingleton उदाहरण = नया उत्सुक सिंगलटन ();निजीउत्सुक सिंगलटन(){}
जनतास्थिर उत्सुक सिंगलटन दृष्टांत लो(){
वापस करना उदाहरण;
}
}
उत्सुक सिंगलटनजावा वर्ग लोड होने पर खुद का एक नया उदाहरण बनाता है। यह इस उदाहरण को निजी स्थैतिक को सौंपता है उदाहरण चर, जो केवल सिंगलटन क्लास के भीतर ही पहुँचा जा सकता है। उदाहरण चर के लिए बाहरी पहुँच का एकमात्र बिंदु के माध्यम से है दृष्टांत लो() तरीका। वह विधि कक्षा के पहले बनाए गए उदाहरण को लौटाती है।
यह दृष्टिकोण बहुत अच्छा है क्योंकि यह रोकता है बहु सूत्रण समस्या, जो सिंगलटन पैटर्न की सबसे बड़ी चुनौतियों में से एक है। इससे पहले कि कोई नया थ्रेड अपने इंस्टेंस वेरिएबल तक पहुंच सके, यह मल्टीथ्रेडिंग समस्या को स्वयं का एक नया इंस्टेंस बनाकर हल करता है। यह गारंटी देता है कि प्रत्येक थ्रेड के पास केवल उसी उदाहरण तक पहुंच होगी।
हालांकि, उत्सुक दृष्टिकोण केवल तभी व्यावहारिक है जब आपका एप्लिकेशन सिंगलटन क्लास के उदाहरण का उपयोग करेगा क्योंकि यह चलना शुरू हो जाता है। अन्यथा, अनावश्यक रूप से संसाधनों का उपयोग करते हुए, आपके एप्लिकेशन को इसकी आवश्यकता होने से पहले ही आप एक ऑब्जेक्ट बना लेंगे।
आलसी दृष्टिकोण
आलसी दृष्टिकोण उत्सुक दृष्टिकोण समस्या का समाधान है। यह आपको सिंगलटन क्लास का एक नया उदाहरण बनाने की अनुमति देता है, जब आपके प्रोग्राम को इसकी आवश्यकता होती है।
जनताकक्षाआलसीसिंगलटन{
निजीपरिवर्तनशीलस्थिर आलसीसिंगलटन उदाहरण;निजीआलसीसिंगलटन(){}
जनतास्थिर आलसीसिंगलटन दृष्टांत लो(){
अगर (उदाहरण == व्यर्थ) {
सिंक्रनाइज़ (आलसी सिंगलटन.कक्षा) {
अगर (उदाहरण == व्यर्थ) {
उदाहरण = नया आलसी सिंगलटन ();
}
}
}
वापस करना उदाहरण;
}
}
आलसी दृष्टिकोण मल्टीथ्रेडिंग समस्या का उपयोग करके हल करता है सिंक्रनाइज़ कीवर्ड। यह दो थ्रेड्स को एक ही समय में इंस्टेंस वेरिएबल तक पहुँच प्राप्त करने से रोकता है। सिंक्रनाइज़ महंगा है, हालांकि, एप्लिकेशन केवल एक बार इसका उपयोग करता है, जब यह पहली बार getInstance() को कॉल करता है।
सिंगलटन पैटर्न का उपयोग कब करें
डायलॉग बॉक्स बनाने, रजिस्ट्री सेटिंग्स को संभालने या थ्रेड पूल को प्रबंधित करने के लिए सिंगलटन पैटर्न कई परिदृश्यों में उपयोगी है।
सिंगलटन पैटर्न के लिए एक अन्य सामान्य उपयोग एक केंद्रीय वर्ग बनाना है जो डेटाबेस कनेक्शन का प्रबंधन करता है।