제이온

[इफेक्टिव जावा] आइटम 2. यदि कंस्ट्रक्टर में कई पैरामीटर हैं तो बिल्डर पर विचार करें

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

रचना: 2024-04-27

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

क्रमिक कन्स्ट्रक्टर पैटर्न

स्थिर फ़ैक्टरी और कन्स्ट्रक्टर, दोनों ही कई पैरामीटर होने पर उचित रूप से प्रतिक्रिया देने में असमर्थ होते हैं। उदाहरण के लिए, यदि किसी क्लास के 6 फ़ील्ड हैं और आप 2 पैरामीटर, 3 पैरामीटर, ... आदि के लिए अलग-अलग कन्स्ट्रक्टर बनाना चाहते हैं, तो आप नीचे दिए गए क्रमिक कन्स्ट्रक्टर पैटर्न का उपयोग कर सकते हैं।



लेकिन यह भी, यदि पैरामीटर बहुत अधिक हैं, तो कोड को पढ़ते समय प्रत्येक मान का अर्थ समझना मुश्किल हो जाता है और समान प्रकार के पैरामीटर को भ्रमित करके मान डालने की संभावना रहती है।


जावा बीन्स पैटर्न

जावा बीन्स पैटर्न में, आप बिना किसी पैरामीटर के कन्स्ट्रक्टर का उपयोग करके ऑब्जेक्ट बनाते हैं और फिर सेटर मेथड को कॉल करके वांछित पैरामीटर मान सेट करते हैं।



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


बिल्डर पैटर्न

क्रमिक कन्स्ट्रक्टर पैटर्न की स्थिरता और जावा बीन्स पैटर्न की पठनीयता को मिलाकर बिल्डर पैटर्न का उपयोग मुख्य रूप से किया जाता है।

क्लाइंट सीधे ऑब्जेक्ट बनाने के बजाय, केवल आवश्यक पैरामीटर के साथ कन्स्ट्रक्टर को कॉल करके बिल्डर ऑब्जेक्ट प्राप्त करता है। फिर, वह बिल्डर ऑब्जेक्ट द्वारा प्रदान किए गए एक प्रकार के सेटर मेथड का उपयोग करके वांछित वैकल्पिक पैरामीटर सेट करता है। अंत में, वह बिना किसी पैरामीटर के build() मेथड को कॉल करके आवश्यक ऑब्जेक्ट प्राप्त करता है।



Builder क्लास के अंदर कन्स्ट्रक्टर केवल आवश्यक पैरामीटर इनपुट लेता है और बाकी वैकल्पिक पैरामीटर एक प्रकार के सेटर मेथड के जरिए भरे जाते हैं। और अंत में, build() मेथड के जरिए NutritionFactsWithBuilderPattern ऑब्जेक्ट बनाया जाता है। NutritionFactsWithBuilderPattern क्लास अपरिवर्तनीय है और बिल्डर के सेटर मेथड खुद को वापस करते हैं, जिससे उन्हें लगातार कॉल किया जा सकता है। इस तरीके को फ्लुएंट एपीआई या मेथड चेनिंग कहते हैं।



क्लाइंट के नजरिए से, बिल्डर पैटर्न के जरिए कोड लिखना और पढ़ना आसान हो जाता है।


क्लास जो पदानुक्रमित ढंग से डिज़ाइन किए गए हैं, उनके साथ बिल्डर पैटर्न अच्छी तरह से काम करता है


Pizza.Builder क्लास एक पुनरावर्ती प्रकार सीमित जेनेरिक प्रकार है और self() नामक एक सार मेथड जोड़ा गया है ताकि सबक्लास को बिना किसी कास्टिंग के मेथड चेनिंग का समर्थन कर सके। सबक्लास में, इस सार मेथड का रिटर्न मान स्वयं होना चाहिए।

अब, न्यूयॉर्क पिज्जा और कैलज़ोन पिज्जा नामक Pizza के सबक्लास को देखते हुए बिल्डर पैटर्न की लचीलापन को देखें।



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



क्लाइंट के नजरिए से, Pizza के enum और प्रत्येक सबक्लास के enum का मिश्रण संभव है, और ऑब्जेक्ट को पूरा करने के लिए प्रत्येक के उचित मेथड का उपयोग किया जा सकता है।


बिल्डर पैटर्न के नुकसान

  • बिल्डर ऑब्जेक्ट बनाना होगा।
  • कोड लंबा हो जाता है।


सारांश

यदि कन्स्ट्रक्टर या स्टेटिक फ़ैक्टरी मेथड को कई पैरामीटर संभालने की आवश्यकता है, तो बिल्डर पैटर्न पर विचार करें।


स्रोत

  • इफेक्टिव जावा

टिप्पणियाँ0

LegiNote प्रोजेक्ट विकास की कहानी 2 - तकनीकी ढाँचा और वर्करLegiNote प्रोजेक्ट विकास की कहानी के दूसरे भाग में, Go भाषा का उपयोग करके विकसित वर्कर के बारे में बताया गया है। डेटा संग्रह और अपडेट तर्क कार्यान्वयन और प्रोजेक्ट संरचना पद्धति का परिचय दिया गया है।
statpan
statpan
statpan
statpan

August 20, 2024

2024-11-19 जीवन में रुचि रखने वाली विविध सामग्री: समाचार / TDD / AI / डेटा विश्लेषण2024 नवंबर 19 को लिखा गया दैनिक अवलोकन रिकॉर्ड है। इसमें समाचार, TDD, AI और डेटा विश्लेषण से संबंधित सामग्री शामिल है। शेयर बाजार, क्रिप्टोकरेंसी के रुझान, AI के भविष्य के पूर्वानुमान आदि जैसी विभिन्न जानकारियों का संक्षेप में सारांश दिया गया है।
Charles Lee
Charles Lee
Charles Lee
Charles Lee

November 19, 2024

[गैर-तकनीकी, डेवलपर बनकर कैसे बचे] 16. नए डेवलपर के लिए पोर्टफोलियो बनाने के टिप्सनए डेवलपर के पोर्टफोलियो को लिखने के टिप्स दिए गए हैं। प्रोजेक्ट के अनुभव और डेवलपमेंट फीचर को विस्तार से लिखना और यह स्पष्ट करना महत्वपूर्ण है कि किस तरह की सेवा विकसित की गई है।
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

बिना जटिल वेब बिल्डर के उच्च-गुणवत्ता वाली ब्रांड वेबसाइट बनाने का तरीकावेब बिल्डर के बिना, 'दुरुमिस' (durumis) के साथ आसानी से और तेज़ी से अपनी ब्रांड वेबसाइट बनाएं और अनुकूलित करें। मोबाइल के अनुकूल डिज़ाइन और विभिन्न सुविधाओं के साथ, यह आपके व्यवसाय को बढ़ावा देने और व्यक्तिगत पोर्टफोलियो बनाने के लिए उपयोगी है।
리틀리 블로그|올인원 프로필 링크
리틀리 블로그|올인원 프로필 링크
리틀리 블로그|올인원 프로필 링크
리틀리 블로그|올인원 프로필 링크

June 4, 2024

[गैर-तकनीकी पृष्ठभूमि वाले, डेवलपर बनने का सफ़र] 17. नए डेवलपर का पोर्टफोलियो, कहाँ तक?नए डेवलपर के पोर्टफोलियो को बुनियादी CRUD फंक्शन के कार्यान्वयन और बाहरी API एकीकरण के अनुभव के इर्द-गिर्द बनाना अच्छा होता है।
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

सहप्रसरण और प्रतिसहप्रसरणयह लेख सहप्रसरण और प्रतिसहप्रसरण की अवधारणाओं की व्याख्या करता है। यह Animal और Dog के उदाहरणों के माध्यम से सहप्रसरण और प्रतिसहप्रसरण की व्याख्या करता है और ईवेंट हैंडलिंग आदि में लचीलापन सुनिश्चित करने के लिए प्रतिसहप्रसरण की आवश्यकता पर बल देता है। इ
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

November 1, 2024