मुझे एक ही प्रश्न बहुत दिलचस्प मिला।
साब कार उदाहरण दिलचस्प है लेकिन यह "गैंग ऑफ फोर" (डिजाइन पैटर्न) में बिल्डर पैटर्न के विवरण का पालन नहीं करता है।
मैं "गैंग ऑफ चार" शब्दावली का उपयोग करूँगा।
गैंग ऑफ चार में, aDirector->Construct()
के प्रत्येक आमंत्रण के लिए ठोस बिल्डरों का मिश्रण नहीं हो सकता है, इसलिए साब उदाहरण, जबकि दिलचस्प है, वास्तव में मेरे लिए सवाल का जवाब नहीं देता है।
बिल्डर पदानुक्रम से निर्देशक वस्तु की जुदाई एक महत्वपूर्ण अंतर है:
मैं कुछ देखते हैं। टेम्पलेट फैक्ट्री में सामान्यीकृत प्रवाह और ओवर्रिडेन विधियों का अनुकरण करने वाली विधि एक ही कक्षा के सदस्य हैं। यह बिल्डर पैटर्न को प्रक्रिया के आंतरिक चरणों को समाहित करने में बेहतर बनाता है क्योंकि क्लाइंट कोड केवल डायरेक्टर ऑब्जेक्ट तक पहुंचने पर ऐसी विधियों के संपर्क में आने की संभावना कम है। बिल्डर पैटर्न भी बिल्डर पदानुक्रम से पूरी तरह स्वतंत्र रूप से असेंबली प्रक्रिया के निर्माण की अनुमति देता है, जो आवश्यक होने पर बिल्डर उदाहरण के अधिक लचीले प्रतिस्थापन की इजाजत देता है। उदाहरण के लिए, एक बार जब आपके पास एक निर्देशक उदाहरण होता है तो आप आसानी से कंक्रीट बिल्डर को प्रतिस्थापित करते समय उत्पाद के कई प्रस्तुतिकरण बना सकते हैं। इसलिए निर्माता अधिक गतिशील और बेहतर कंक्रीट निर्माता के आंतरिक कार्यों को encapsulates है।
इसके अतिरिक्त, यदि आप विरासत द्वारा निदेशक वस्तु पर विस्तार करना चाहते हैं तो आप अपने पदानुक्रम को गुणा किए बिना ऐसा कर सकते हैं। उदाहरण के लिए, आपके पास अंतिम निर्माण से पहले समय बचाने के लिए भवन की एक स्पष्ट प्रक्रिया हो सकती है - आप अपने कंक्रीट बिल्डरों को फिर से लागू करने के बिना विरासत द्वारा इसे अनुकूलित करने के लिए निदेशक वस्तु को उपclass कर सकते हैं या यहां तक कि "टेम्पलेट विधि" का उपयोग भी कर सकते हैं।
लेकिन इससे हमें एक और पैटर्न पर विचार करने की ओर अग्रसर किया जाता है जो "टेम्पलेट फैक्टरी" - "रणनीति" पैटर्न से निकटता से संबंधित है।
रणनीति दो स्पष्ट मतभेदों के साथ टेम्पलेट फैक्ट्री की तरह बहुत अधिक है: यह रणनीतिक पदानुक्रम से एक संदर्भ ऑब्जेक्ट को अलग करता है जो रनटाइम में एक समस्या उदाहरण के लिए एल्गोरिदम स्विच करने की इजाजत देता है। एक और अंतर यह है कि उदाहरण यह सुझाव देते हैं कि रणनीति का आह्वान करने में जरूरी नहीं है कि "टेम्पलेट विधि" में जटिल या संरचित प्रक्रिया शामिल हो।
लेकिन मैं इसे किसी अन्य बिंदु पर जाने के लिए बिल्डर के एनालॉग के रूप में यहां लाता हूं - यदि "रणनीति" बिल्डर को अपनी कक्षा संरचना में समानांतर है, तो "टेम्पलेट विधि" के समानांतर रचनात्मक पैटर्न "फैक्टरी विधि" होना चाहिए । यह स्पष्ट है, न केवल नाम से, बल्कि दिलचस्प रूप से पर्याप्त है, "फैक्टरी विधि" और "टेम्पलेट विधि" के लिए पुस्तक के अध्याय दोनों चर्चाएं लगभग समान उदाहरण (संपादन दस्तावेज़ों के लिए एक आवेदन) का उपयोग करती हैं।
तो, रचनात्मक और व्यवहार पैटर्न के बीच क्या अंतर है, इस सवाल के बिना, मुझे लगता है कि बिल्डर और फैक्टरी विधि दोनों मूल रूप से विशिष्ट मामलों और रणनीति और टेम्पलेट विधि के परिशोधन हैं।
तो सवाल बन जाता है - अगर आप बिल्डर और खाका फैक्टरी में कोई अंतर नहीं देखते हैं - इन सवालों के जवाब देने की कोशिश:
आप प्रणाली के उस विशेष हिस्से पर होने पसंद करते हैं क्या परिप्रेक्ष्य? क्या यह "व्यवहार" या "सृजन" है? और
क्या आपको मजबूत encapsulation, या गतिशील प्रतिस्थापन या तैनाती या एक निर्माता उदाहरण के tweaking की आवश्यकता है, या आप जटिलता की प्रक्रिया (विरासत, संरचना, या अन्यथा) निर्माण प्रक्रिया के आसपास विकसित करने की उम्मीद है या टेम्पलेट विधि? यदि इनमें से किसी भी प्रश्न का उत्तर बिल्डर/रणनीति संरचना के साथ जाता है। अन्यथा, एक्सएक्स विधि पैटर्न में संबंध या व्यवहार के सरल polymorphysm का उपयोग करें।
धन्यवाद jgauffin। बिल्डर में निदेशक कैसे काम करता है उससे संबंधित एक सवाल। निर्देशक को एक विशिष्ट क्रम में वस्तु बनाने के लिए कदम नहीं हैं। क्या होगा यदि कोई निर्माता आदेश बदलना चाहता है? मैं यहां प्रदान किए गए उदाहरण का जिक्र कर रहा हूं http://www.dofactory.com/Patterns/PatternBuilder.aspx#_self1 –
ठीक है। फिर आप Liskovs Substituion सिद्धांत तोड़ रहे हैं और अपने कोड को फिर से डिजाइन करना चाहिए;) – jgauffin