मैंने हाल ही में कोड रिव्यू पर मेरा एक जावा उत्तर हटा दिया है , जो इस तरह शुरू हुआ है:
private Person(PersonBuilder builder) {
रूक जा। लाल झंडा। एक व्यक्ति निर्माण एक व्यक्ति का निर्माण करेगा; यह एक व्यक्ति के बारे में जानता है। व्यक्ति वर्ग को किसी व्यक्ति-कर्मचारी के बारे में कुछ नहीं जानना चाहिए - यह सिर्फ एक अपरिवर्तनीय प्रकार है। आपने यहां एक परिपत्र युग्मन बनाया है, जहां A, B पर निर्भर करता है, जो A पर निर्भर करता है।
व्यक्ति को बस इसके मापदंडों का सेवन करना चाहिए; एक ग्राहक जो निर्माण के बिना एक व्यक्ति बनाने के लिए तैयार है उसे ऐसा करने में सक्षम होना चाहिए।
मुझे एक अपमान के साथ थप्पड़ मारा गया, और बताया कि (उद्धृत करते हुए) लाल झंडा, क्यों? यहाँ कार्यान्वयन का वही आकार है जो जोशुआ बलोच ने अपनी "प्रभावी जावा" पुस्तक (आइटम # 2) में प्रदर्शित किया था।
तो, ऐसा प्रतीत होता है कि जावा में बिल्डर पैटर्न को लागू करने का वन राइट तरीका बिल्डर को नेस्टेड प्रकार बनाना है (यह ऐसा नहीं है कि यह सवाल हालांकि के बारे में है), और फिर उत्पाद बनाएं (ऑब्जेक्ट का वर्ग बनाया जा रहा है) ) बिल्डर पर निर्भरता लें , जैसे:
private StreetMap(Builder builder) { // Required parameters origin = builder.origin; destination = builder.destination; // Optional parameters waterColor = builder.waterColor; landColor = builder.landColor; highTrafficColor = builder.highTrafficColor; mediumTrafficColor = builder.mediumTrafficColor; lowTrafficColor = builder.lowTrafficColor; }
समान बिल्डर पैटर्न के लिए एक ही विकिपीडिया पृष्ठ में C # के लिए एक बेतहाशा अलग (और अधिक लचीला) कार्यान्वयन है।
//Represents a product created by the builder public class Car { public Car() { } public int Wheels { get; set; } public string Colour { get; set; } }
जैसा कि आप देख सकते हैं, यहां उत्पाद को एक Builder
वर्ग के बारे में कुछ भी नहीं पता है , और सभी के लिए यह एक प्रत्यक्ष निर्माता कॉल, एक अमूर्त कारखाना, ... या एक बिल्डर द्वारा त्वरित किया जा सकता है - जहां तक मैं इसे समझता हूं, एक रचनात्मक पैटर्न के उत्पाद को कभी भी इस बारे में कुछ भी जानने की जरूरत नहीं है कि इसे क्या बनाया जा रहा है।
मुझे काउंटर-तर्क दिया गया है (जो स्पष्ट रूप से बलोच की पुस्तक में स्पष्ट रूप से बचाव किया गया है) कि एक बिल्डर पैटर्न का उपयोग एक प्रकार को फिर से तैयार करने के लिए किया जा सकता है जिसमें एक निर्माता दर्जनों वैकल्पिक तर्कों के साथ फूला हुआ होगा। इसलिए मैंने जो सोचा था उससे चिपके रहने के बजाय मुझे पता था कि मैंने इस साइट पर थोड़ा शोध किया, और पाया कि जैसा मुझे संदेह था, इस तर्क में पानी नहीं है ।
तो सौदा क्या है? क्यों एक समस्या है कि पहली जगह में भी मौजूद नहीं होना चाहिए पर अधिक इंजीनियर समाधान के साथ आते हैं ? यदि हम जोशुआ बलोच को एक मिनट के लिए अपने पदचिन्ह से निकालते हैं, तो क्या हम एक ठोस, दो ठोस प्रकारों को युग्मित करने और इसे एक सर्वोत्तम अभ्यास कहने के लिए एक अच्छा, वैध कारण लेकर आ सकते हैं?
यह सब मेरे लिए कार्गो-पंथ प्रोग्रामिंग का पुनरावर्तन है ।