제이온

[इफेक्टिव जावा] आइटम 3. प्राइवेट कंस्ट्रक्टर या एन्यूमरेशन टाइप का उपयोग करके सिंगलटन होने की गारंटी दें

  • लेखन भाषा: कोरियाई
  • आधार देश: सभी देशcountry-flag
  • आईटी

रचना: 2024-04-27

रचना: 2024-04-27 00:48

सिंगलटन

सिंगलटन की अवधारणा

सिंगलटन एक ऐसा वर्ग है जिसका केवल एक ही इंस्टेंस बनाया जा सकता है। सिंगलटन का एक विशिष्ट उदाहरण स्टेटलेस ऑब्जेक्ट या एक अद्वितीय सिस्टम घटक है। हालाँकि, सिंगलटन क्लास को टेस्ट करना मुश्किल होता है जब तक कि प्रकार को इंटरफ़ेस के रूप में परिभाषित नहीं किया जाता है और इसे इसके कार्यान्वयन के रूप में परिभाषित नहीं किया जाता है।


सिंगलटन बनाने के तरीके

public static सदस्य जो final फ़ील्ड है, का उपयोग करना



निजी कन्स्ट्रक्टर केवल एक बार Elvis इंस्टेंस को इनिशियलाइज़ करते समय बुलाया जाता है, जिससे यह सुनिश्चित होता है कि यह पूरे सिस्टम में अद्वितीय है। हालाँकि, AccessibleObject.setAccessible() का उपयोग करके निजी कन्स्ट्रक्टर को कॉल किया जा सकता है। इस तरह के रिफ्लेक्शन हेरफेर को रोका जा सकता है, जैसे कि दूसरी ऑब्जेक्ट बनाते समय अपवाद फेंकना।


  • लाभ
    • API में स्पष्ट रूप से यह दिखाई देता है कि यह क्लास सिंगलटन है।
    • यह संक्षिप्त है।


public static के साथ स्टेटिक फैक्ट्री मेथड देना


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


  • लाभ
    • API को बदले बिना सिंगलटन को गैर-सिंगलटन में बदला जा सकता है।
      • उदाहरण के लिए, स्टेटिक फैक्ट्री मेथड को कॉल करने वाले थ्रेड के आधार पर एक अलग इंस्टेंस लौटाने के लिए बनाया जा सकता है।
    • यदि आवश्यक हो, तो इसे जेनेरिक सिंगलटन फैक्ट्री मेथड में बदला जा सकता है।
    • स्टेटिक फैक्ट्री के मेथड रेफरेंस को प्रोवाइडर के रूप में इस्तेमाल किया जा सकता है।
      • उदाहरण के लिए, Elvis::getInstance के बजाय, आप Supplier<Elvis> का उपयोग कर सकते हैं।


यदि इन लाभों का उपयोग करने की आवश्यकता नहीं है, तो पहला तरीका उपयोग करना बेहतर है।


एन्यूमरेटेड टाइप का उपयोग करना


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

हालांकि, यह ध्यान रखना महत्वपूर्ण है कि सिंगलटन जिसे आप बनाना चाहते हैं वह इंटरफ़ेस को विरासत में प्राप्त कर सकता है, लेकिन क्लास को विरासत में प्राप्त नहीं कर सकता है।


सिंगलटन क्लास को सीरियलाइज़ करते समय सावधानियां

यदि आप ऊपर बताए गए पहले या दूसरे तरीके से बनाए गए सिंगलटन क्लास को सीरियलाइज़ करना चाहते हैं, तो आपको केवल Serializable को लागू करने के अलावा, सभी इंस्टेंस फ़ील्ड को transient के रूप में घोषित करना होगा और readResolve() मेथड को ओवरराइड करके देना होगा।



स्रोत

टिप्पणियाँ0

Node.js जूनियर भी बना सकते हैं framework level DIयह लेख Node.js सर्वर विकास में निर्भरता इंजेक्शन (DI) को लागू करने के तरीके के बारे में बताता है। यह बताता है कि TypeScript कंपाइलर के Reflect मेटाडेटा फ़ंक्शन का उपयोग करके DI को कैसे लागू किया जाए और संबंधित लाइब्रेरी का परिचय देता है।
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

November 8, 2024

जेनेरिक का उपयोग करके अपरिवर्तनीय मान प्राप्त करनाटाइपस्क्रिप्ट 5.0 के नए कीवर्ड का उपयोग करके जेनेरिक में अपरिवर्तनीय मानों को आसानी से पास करने का तरीका बताया गया है। यह सरणी या लिटरल प्रकार के लिए भी उपयोग किया जा सकता है और इससे लाइब्रेरी विकास और उपयोगकर्ता अनुभव में सुधार होता है।
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

October 30, 2024

📌 स्टार्टअप समुदाय सीनडीस (seenthis.kr) के मुख्य कार्यकारी अधिकारी मिन क्वांग-सेओक का साक्षात्कारसीनडीस (seenthis.kr) के मुख्य कार्यकारी अधिकारी मिन क्वांग-सेओक के साक्षात्कार में, स्टार्टअप के अकेलेपन को दूर करने के लिए 'जानकारी साझा करने' और 'सहानुभूति कनेक्शन' के उद्देश्य से समुदाय शुरू करने की पृष्ठभूमि, संचालन विधि और भविष्य के दृष्टिकोण पर चर्च
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)

August 19, 2025

व्यक्तित्व और ईएसजी प्रबंधन का सम्मिश्रण: स्थायी व्यवसाय के लिए रणनीतिक दृष्टिकोणग्राहक मूल्य के अनुरूप स्थायी व्यावसायिक रणनीति तैयार करने के लिए व्यक्तित्व और ईएसजी प्रबंधन को एकीकृत करने का तरीका प्रस्तुत करता है। विशेष रूप से, ईएसजी पहलों को मजबूत करने के लिए ग्राहक व्यक्तित्व का उपयोग करने वाले रणनीतिक दृष्टिकोण प्रस्तुत किए गए ह
NEWS FDN (다큐)
NEWS FDN (다큐)
NEWS FDN (다큐)
NEWS FDN (다큐)

August 2, 2024

ओपनसोर्स योगदान अनुभवयह लेख ओपनसोर्स योगदान अनुभव साझा करता है, डर पर काबू पाने और पहला कदम उठाने का साहस प्रदान करता है। छोटे सुधारों से शुरुआत करके आत्मविश्वास हासिल करने और बढ़ने की प्रक्रिया के बारे में बताता है।
seungwon
seungwon
seungwon
seungwon

May 3, 2025