मुझे एक समवर्ती वातावरण में आलसी लोड संसाधनों की आवश्यकता है। संसाधनों को लोड करने के लिए कोड केवल एक बार निष्पादित किया जाना चाहिए।आलसी लोडेड सिंगलटन: डबल-चेक लॉकिंग बनाम मांग धारक idiom पर प्रारंभिक
Double-checked locking (जेआरई 5+ और अस्थिर कीवर्ड का उपयोग करके) और Initialization on demand holder idiom अच्छी तरह से नौकरी के लिए उपयुक्त लगता है।
बस कोड को देखकर, मांग धारक मुहावरे पर प्रारंभिक क्लीनर और अधिक कुशल लगता है (लेकिन हे, मैं यहां अनुमान लगा रहा हूं)। फिर भी, मुझे अपने सिंगलेट्स में से प्रत्येक में पैटर्न लेना और पैटर्न रखना होगा। कम से कम मेरे लिए, यह समझना मुश्किल होगा कि इस जगह कोड को इस तरह क्यों लिखा गया था ...
मेरा प्रश्न यहां है: कौन सा दृष्टिकोण बेहतर है? और क्यों? यदि आपका उत्तर कोई नहीं है। जावा एसई पर्यावरण में आप इस आवश्यकता से कैसे निपटेंगे?
वैकल्पिक
मैं भव्य मेरी पूरी परियोजना पर फायदा नहीं है बिना इस के लिए CDI का उपयोग कर सकते हैं? वहाँ कोई लेख है?
अच्छा। लेकिन मुझे यकीन नहीं है कि मैंने यह समझ लिया कि यह कैसे काम करता है। आइए मान लें कि 'Elvis.getAge()' को कुछ सुंदर गहन संचालन की आवश्यकता है, जिन्हें मैं जितना संभव हो सके देरी करना चाहता हूं और केवल एक बार निष्पादित करना चाहता हूं। मैं अपना लोडिंग कोड कहां रखूंगा? एनम कन्स्ट्रक्टर में? –
निश्चित रूप से, यह काम करता है। – djg
@djg मेरे लिए काफी अच्छा लगता है। लेकिन क्या गणना को और भी देरी करने का कोई तरीका है। उदाहरण के लिए, कहें कि मैं स्वतंत्र रूप से कई अलग-अलग संसाधन लोड करना चाहता हूं। इस पैटर्न का उपयोग करके मुझे विभिन्न enums लिखना होगा। क्या केवल एक enum के साथ इसे हासिल करने का कोई तरीका है? आइए 'एल्विस' 'INSTANCE1.getAge()' और 'INSTANCE2.getAge()' के साथ कहें। क्या मैं दोनों थ्रेड-सुरक्षित तरीके से स्वतंत्र रूप से लोड कर सकता हूं? –