जावा में सिंगलटन क्लास - सिंगलटन क्लास का उपयोग कैसे करें?



जावा में सिंग्लटन क्लास का यह लेख विभिन्न तरीकों के बारे में बात करता है जिसमें एक क्लास को व्यावहारिक कार्यान्वयन के साथ सिंगलटन बनाया जा सकता है।

जावा में, एक एकल वर्ग एक वर्ग है जो एक निश्चित समय में केवल एक उदाहरण हो सकता है। यह जावा में पाँच क्रिएशनल डिज़ाइन पैटर्न में से एक है जो इसके सहज विकास में मदद करता है । इस लेख के माध्यम से, मैं आपको जावा में एक एकल वर्ग क्या है और आप इसे कैसे बना सकते हैं, में स्पष्ट जानकारी देंगे।

नीचे इस लेख में दिए गए विषय होंगे:





आएँ शुरू करें।

जावा में एक सिंगलटन क्लास क्या है?

आम शब्दों में, जावा में एक सिंगलटन वर्ग वह वर्ग है जो एक समय में एक ही उदाहरण के माध्यम से इसे एक्सेस करने की अनुमति देता है। यह डिज़ाइन पैटर्न एक वर्ग की अनावश्यक तात्कालिकता को प्रतिबंधित करने और केवल एक को सुनिश्चित करने के लिए है जेवीएम उदाहरण के अनुसार किसी भी समय मौजूद है। इस प्रकार, इस पैटर्न के साथ, सिंगलटन के रूप में परिभाषित किसी भी वर्ग का केवल एक ही उदाहरण हैइसके उपयोग के वैश्विक बिंदु के साथ। सामान्य वर्गों के विपरीत, एक सिंग्लटन वर्ग अनुप्रयोगों के जीवन चक्र के अंत तक नष्ट नहीं होता है।



लेकिन हमें पहले स्थान पर सिंगलटन क्लास की आवश्यकता क्यों है?

खैर, एक वर्ग के उदाहरण निर्माण को प्रतिबंधित करके, यह मेमोरी स्पेस बचाता है क्योंकि अब हर बार नया अनुरोध किए जाने पर ऑब्जेक्ट नहीं बनाया जाएगा। इसके बजाय, एक ही वस्तु का बार-बार उपयोग किया जाएगा। यही कारण है कि जावा में सिंगलटन पैटर्न ज्यादातर के साथ प्रयोग किया जाता है और डेटाबेस अनुप्रयोग। यह मूल रूप से लॉगिंग, कैशिंग, थ्रेड पूलिंग, कॉन्फ़िगरेशन सेटिंग्स और कई और अधिक के लिए उपयोग किया जाता है।

मुझे आशा है कि आप जावा में सिंगलटन वर्ग की अवधारणा के साथ स्पष्ट हैं। इसलिए, अब इसमें आगे बढ़ने की अनुमति देता हैजावा लेख में सिंगलटन क्लास और देखें कि उन्हें कैसे बनाया जाता है।



जावा सिंगलटन क्लास डिजाइन करने के तरीके

जावा में एक क्लास सिंगलटन बनाने के लिए, आपको निम्नलिखित तीन चीजों की आवश्यकता है:

  1. एक वर्ग के स्थिर सदस्य
  2. निजी निर्माणकर्ता
  3. स्थिर कारखाने विधि

चूंकि जावा डेवलपर्स को अपने क्षितिज का पता लगाने देता है, इसलिए हैंकई तरीके जिसमें आप एक सिंगलटन वर्ग डिजाइन कर सकते हैं। नीचे मैंने सबसे लोकप्रिय लोगों को सूचीबद्ध किया है।

  1. उत्सुक प्रारंभिक विधि
  2. आलसी प्रारंभिक विधि
  3. थ्रेड सेफ सिंगलटन विधि
  4. डबल लॉक विधि के साथ आलसी प्रारंभिक
  5. आलसी लोड विधि
  6. स्थैतिक ब्लॉक प्रारंभिक विधि

आइए अब एक-एक करके इनमें से प्रत्येक में गहराई से गोता लगाएँ।

1. एगर इनिशियलाइज़ेशन मेथड

यह एक सिंगलटन क्लास बनाने की सबसे आसान विधि है जहाँ क्लास लोडिंग के समय उदाहरण बनाया जाता है। इस पद्धति का उपयोग करके एक एकल वर्ग बनाने के लिए, आपको नीचे बताए गए चरणों का पालन करना होगा:

  1. कंस्ट्रक्टर को निजी घोषित करें।
  2. अगला कदम इस सिंगलटन वर्ग के लिए एक निजी वर्ग का सदस्य बनाना है।
  3. अब, आपको एक कारखाने विधि को परिभाषित करने की आवश्यकता है जिसका उपयोग आपकी कक्षा की वस्तु को वापस करने के लिए किया जाएगा, जिसे हमने कक्षा सदस्य के उदाहरण के रूप में बनाया है।
  4. यदि आप इस स्थिर उदाहरण को सीधे एक्सेस करना चाहते हैं, तो आप एक स्थिर सदस्य को सार्वजनिक भी घोषित कर सकते हैं।

अब, आइए देखें कि इन्हें कैसे लागू किया जाए।

c ++ में स्टोरेज क्लासेस
// एगर इनिशियलाइज़ेशन पब्लिक क्लास EagerSingleton {प्राइवेट स्टैटिक फाइनल EagerSingleton इंस्टेंट = new EagerSingleton () प्राइवेट EagerSingleton () {} पब्लिक स्टेटिक EagerSingleton getInstance () ('INSTANCE पर लौटें}}

यदि आप कोड देखते हैं, तो आप देख सकते हैं कि हर बार जब हम किसी वस्तु का उपयोग कर रहे हैं, तो हम उसका उपयोग कर रहे हैंदृष्टांत लो()विधि वर्ग को आमंत्रित करने के बजाय बिल्डरलेकिन इसके अपने नुकसान हैं। यदि आप एक क्लास सिंगलटन बनाने के लिए इस पद्धति का उपयोग करते हैं, तो एक उदाहरण इस तथ्य के बावजूद बनाया जाएगा कि एप्लिकेशन इसका उपयोग कर रहा है या नहीं।

तो, चलिए आगे बढ़ते हैं और जावा में एक सिंगलटन क्लास बनाने का दूसरा तरीका देखते हैं।

2. आलसी प्रारंभिक विधि

इस विधि को आलसी आरंभीकरण कहा जाता है क्योंकि यह वर्ग उदाहरण के निर्माण को स्थगित करता है जब तक कि इसका पहला उपयोग न हो जाए। मेरा क्या मतलब है, इस विधि के साथ, एक वस्तु केवल तभी बनाई जाती है जब इसकी आवश्यकता होती है। यह अनावश्यक सृजन से बचने में मदद करता है । इस तरह से एक एकल वर्ग डिजाइन करने के लिए, आपको नीचे सूचीबद्ध चरणों का पालन करने की आवश्यकता है:

  1. सबसे पहले, कंस्ट्रक्टर को निजी घोषित करें।
  2. फिर आपको इस वर्ग के लिए एक निजी स्थिर उदाहरण बनाने की आवश्यकता है, लेकिन अभी तक इसे तत्काल करने की कोई आवश्यकता नहीं है।
  3. अंत में, एक फैक्ट्री विधि बनाएं जो पहले जांच करेगी कि उदाहरण सदस्य अशक्त है या नहीं। यदि नहीं, तो यह आपके लिए एकल वर्ग का एक उदाहरण बना देगा और उसे वापस कर देगा।

नीचे दिए गए कोड से पता चलता है कि यह कैसे करना है।

// आलसी प्रारंभिक सार्वजनिक वर्ग LazySingleton {निजी स्थैतिक LazySingleton INSTANCE = null निजी LazySingleton () {} सार्वजनिक स्थैतिक LazySingleton getInstance () {if (INSTANCE = null) {सिंक्रनाइज़ (LazySingleton.class) {INSTANCE = new LazySingleton () वापसी INSTANCE}}

3. थ्रेड सेफ सिंगलटन तरीका

लेकिन उपरोक्त दृष्टिकोण समवर्ती परिदृश्यों में कुछ चिंताओं को बढ़ा सकता है। चूंकि सिंगलटन पैटर्न मुख्य रूप से मल्टी-थ्रेड्स के साथ और यदि उपयोग किया जाता हैएक ही समय में कई थ्रेड्स दर्ज किए जाते हैं, तो यह समस्याएँ बढ़ा सकता है। इससे बचने के लिए हम वैश्विक पहुंच विधि को सिंक्रनाइज़ करके थ्रेड-सेफ सिंगलटन क्लास बनाने की कोशिश करते हैं। यह सुनिश्चित करता है कि केवल एक धागा किसी भी समय इस पद्धति को निष्पादित कर रहा है। कार्यान्वयन देखने के लिए नीचे दिए गए कोड का संदर्भ लें:

// थ्रेड सेफ सिंगलटन पब्लिक क्लास थ्रेडसेफ़सिंगटन {निजी स्टेटिक थ्रेडसेफ़सिंगटन इंस्टेंट प्रायवेट थ्रेडसेफ़सिंगटन () {} पब्लिक स्टेटिक सिंक्रोनाइज़्ड थ्रेडसेफ़िंगटन गेटइन्स्टेंस () {अगर (INSTANCE == null) {INSTANCE = नया थ्रेडसेफ़िंगटन ()} रिटर्न इनस्टैंस}

लेकिन कई बार यह तरीका हर बार की तरह बहुत ही बोझिल हो सकता हैलागू किया जाता है यह विधि का उपयोग करने से पहले इसे बंद करने के लिए प्रतीक्षा करने की आवश्यकता होती है। इससे प्रक्रिया धीमी हो जाती है और हमें अगले दृष्टिकोण तक ले जाती हैडबल लॉक के साथ आलसी प्रारंभिककरण।

4. डबल लॉक के साथ आलसी इनिशियलाइज़ेशन तरीका

इस दृष्टिकोण में, हम विधियों को सिंक्रनाइज़ नहीं करते हैं। बल्कि हम एक ब्लॉक के भीतर ऑब्जेक्ट निर्माण कोड को कवर करते हैं।आप कह सकते हैं कि धागे के ताले की पहले से जाँच करके, यहलॉक अधिग्रहण की संख्या को कम करता है। यह दृष्टिकोण आमतौर पर आवेदन के प्रदर्शन को बढ़ाने के लिए होता है। नीचे दिया गया कोड देखें कि यह कैसे किया जाता है।

// आलसी डबल पब्लिक क्लास के साथ आलसी शुरुआत null) {INSTANCE = नया LazyDoubleLockSingleton ()}}} रिटर्न INSTANCE}}

5. आलसी लोड विधि

यह विधि JSL (जावा लैंग्वेज स्पेसिफिकेशन) पर आधारित है और इसके अनुसार है आवश्यक होने पर ही स्थैतिक डेटा सदस्यों को लोड किया जाएगा। इस प्रकार जब आपका एकल वर्ग JVM में लोड होता है, तो कोई उदाहरण नहीं बनता है। इसके अलावा, कार्यक्रम के निष्पादन के दौरान, क्रमबद्ध क्रम में वैश्विक पद्धति को लागू किया जाता है। इस पद्धति के साथ, आपको लोड करने और आरंभ करने के लिए स्थिर getInstance () को स्पष्ट रूप से सिंक्रनाइज़ नहीं करना होगा। स्थिर वर्ग के सदस्य को एक उचित क्रमबद्ध तरीके से लागू किया जाएगा, वैश्विक पद्धति के समवर्ती चालान को उसी क्रम में वापस किया जाता है, जब वे सिंक्रनाइज़ेशन ओवरहेड निष्पादित किए बिना।

नीचे एक ही प्रदर्शन करने के लिए कोड है।

// आलसी लोड विधि सार्वजनिक वर्ग LazyLoadSingleton {निजी LazyLoadSingleton () {} निजी स्थिर वर्ग SingletonClassHolder {स्थिर अंतिम वार INSTANCE = नया LazyLoadSingleton ()}} सार्वजनिक LazyLoadSingleton getInstance () {return SingletonClassHolder.INSTance}

6. स्टेटिक ब्लॉक इनिशियलाइज़ेशन मेथड

जावा में सिंगलटन क्लास बनाने की यह विधि हैउत्सुक आरंभीकरण विधि के समान। अंतर केवल इतना है कि इस वर्ग के लिए उदाहरण स्थिर ब्लॉक के भीतर बनाया गया है कार्यक्षमता।

// स्टेटिक ब्लॉक इनिशियलाइज़ेशन पब्लिक क्लास StaticBlockSingleton {निजी स्टेटिक StaticBlockSingleton इंस्टेंस निजी StaticBlockSingleton () {} // स्टैटिक ब्लॉक स्टेटिक के भीतर हैंडलिंग अपवाद {try {INSTANCE = new StaticBlockSingleton ()} कैच (एक्सेप्शन e) {थ्रो न्यू RuntimeException (अपवाद अपवाद) एक सिंगलटन क्लास ') का निर्माण करते समय}}} सार्वजनिक स्थैतिक StaticBlockSingleton getInstance () {रिटर्न INSTANCE}}

यह हमें जावा में सिंगलटन वर्ग पर इस लेख के अंत में लाता है। यदि आप जावा के बारे में अधिक जानना चाहते हैं तो आप हमारे बारे में बता सकते हैं ।

अब जब आप समझ गए हैं कि जावा में एक सिंगलटन क्लास क्या है, तो देखें 250,000 से अधिक संतुष्ट शिक्षार्थियों के एक नेटवर्क के साथ एक विश्वसनीय ऑनलाइन शिक्षण कंपनी, एडुरेका द्वारा, दुनिया भर में फैली हुई है। एडुर्का का जावा J2EE और SOA प्रशिक्षण और प्रमाणन पाठ्यक्रम उन छात्रों और पेशेवरों के लिए डिज़ाइन किया गया है जो जावा डेवलपर बनना चाहते हैं। पाठ्यक्रम आपको जावा प्रोग्रामिंग में एक सिर शुरू करने के लिए डिज़ाइन किया गया है और आपको हाइबरनेट और स्प्रिंग जैसे विभिन्न जावा फ्रेमवर्क के साथ कोर और उन्नत जावा अवधारणाओं दोनों के लिए प्रशिक्षित करता है।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया 'जावा में सिंगलटन क्लास' लेख के टिप्पणी अनुभाग में इसका उल्लेख करें और हम जल्द से जल्द आपको वापस कर देंगे।