इस बारे में बहुत सारे प्रश्न हैं कि सिंगलेट्स "खराब" हैं और इसके बजाय किस पैटर्न का उपयोग करना है। वे आम तौर पर सिंगलटन डिज़ाइन पैटर्न पर केंद्रित होते हैं, जिसमें कक्षा पर एक स्थिर विधि से सिंगलटन इंस्टेंस को पुनर्प्राप्त करना शामिल है। यह उन प्रश्नों में से एक नहीं है।मैं निर्भरता इंजेक्शन का उपयोग कर रहा हूं: मुझे किस प्रकार के सिंगलेट्स के रूप में बांधना चाहिए?
जब से मैंने वास्तव में कई महीनों पहले निर्भरता इंजेक्शन की "खोज" की खोज की है, मैं अपनी टीम में अपना गोद लेने, समय के साथ हमारे कोड से स्थिर और सिंगलटन पैटर्न को हटाने और जहां भी संभव हो वहां कन्स्ट्रक्टर-आधारित इंजेक्शन का उपयोग कर रहा हूं। हमने सम्मेलनों को अपनाया है ताकि हमें हमारे डी मॉड्यूल में स्पष्ट बाइंडिंग जोड़ने की आवश्यकता न हो। हम लॉगर इंस्टेंस प्रदान करने के लिए डी फ्रेमवर्क का भी उपयोग करते हैं, ताकि हम प्रत्येक लॉगर को स्वचालित रूप से बता सकें कि यह किस वर्ग के बिना अतिरिक्त कोड में है। अब जब मेरे पास एक ही स्थान है जहां मैं नियंत्रित कर सकता हूं कि विभिन्न प्रकार कैसे बंधे हैं, यह निर्धारित करना वास्तव में आसान है कि किसी विशेष श्रेणी के वर्ग (उपयोगिता वर्ग, भंडार आदि) का जीवन चक्र क्या होना चाहिए।
मेरी प्रारंभिक सोच यह थी कि शायद सिंगल के रूप में कक्षाओं को बाध्य करने के लिए कुछ लाभ होगा यदि मुझे उम्मीद है कि उन्हें काफी बार उपयोग किया जाए। इसका मतलब है कि बहुत कम new
आईएनजी चल रहा है, खासकर जब आप जिस ऑब्जेक्ट को बना रहे हैं वह एक बड़ा निर्भरता पेड़ है। इनमें से किसी भी वर्ग पर बहुत अधिक गैर-स्थैतिक फ़ील्ड हैं, वे मानकों को कन्स्ट्रक्टर में इंजेक्शन दिया जाता है, इसलिए इसका उपयोग नहीं होने पर एक उदाहरण को रखने के लिए अपेक्षाकृत कम मेमोरी ओवरहेड होता है।
फिर मैंने www.codingwithoutcomments.com पर "सिंगलटन मैं तुमसे प्यार करता हूं, लेकिन आप मुझे नीचे ला रहे हैं" पढ़ते हैं, और इससे मुझे आश्चर्य हुआ कि मुझे सही विचार है या नहीं। आखिरकार, निंजा डिफ़ॉल्ट रूप से ऑब्जेक्ट-निर्माण कार्यों को संकलित करता है, इसलिए इन वस्तुओं के अतिरिक्त उदाहरण बनाने में बहुत कम प्रतिबिंब ओवरहेड शामिल है। चूंकि हम कन्स्ट्रक्टर से व्यवसाय तर्क रखते हैं, नए उदाहरण बनाना वास्तव में हल्का ऑपरेशन है। और वस्तुओं में गैर स्थैतिक क्षेत्रों का समूह नहीं है, इसलिए नए उदाहरण बनाने में बहुत अधिक मेमोरी ओवरहेड शामिल नहीं है।
तो इस बिंदु पर, मुझे लगता है कि यह शायद किसी भी तरह से कोई फर्क नहीं पड़ता। क्या अतिरिक्त विचार हैं जिन पर मैंने ध्यान नहीं दिया है? क्या किसी ने वास्तव में कुछ प्रकार की वस्तुओं के जीवन चक्र को बदलकर प्रदर्शन में महत्वपूर्ण सुधार किया है? डी पैटर्न को केवल वास्तविक महत्वपूर्ण चीज़ का पालन करना है, या ऐसे अन्य कारण हैं जो किसी ऑब्जेक्ट का एक उदाहरण का उपयोग कर स्वाभाविक रूप से "खराब" हो सकते हैं?
+1। – StriplingWarrior