2016-09-07 6 views
5

Builder Pattern का उपयोग करते समय मुझे ऑब्जेक्ट कॉन्फ़िगरेशन तक पहुंचने के लिए बिल्डर-ऑब्जेक्ट का पुन: उपयोग क्यों नहीं करना चाहिए? उदाहरण के लिए:बिल्डर पैटर्न का उपयोग करते समय मुझे ऑब्जेक्ट कॉन्फ़िगरेशन तक पहुंचने के लिए बिल्डर-ऑब्जेक्ट का पुन: उपयोग क्यों नहीं करना चाहिए?

सामान्य तरीका:

ObjectA(ObjectBuilder b) { 
    this.a = b.getA(); 
} 
public Object getA(){ 
    return this.a; 
} 

लेकिन कारण है कि मैं सिर्फ इस का उपयोग नहीं कर सकते हैं:

ObjectA(ObjectBuilder b) { 
    this.builder = b; 
} 
public Object getA(){ 
    return this.builder.getA(); 
} 

धन्यवाद :)

+6

एक निर्माता का उपयोग करने के बारे में पूरा बिंदु अपरिवर्तनीय वस्तुओं का निर्माण करना है: निर्माता म्यूटेबल है, जो चीज बनाता है वह नहीं है। यदि आप निर्माता को प्रतिनिधि देते हैं, तो आपका उदाहरण दोबारा उत्परिवर्तनीय है: कोई भी जिसके पास 'ऑब्जेक्टबिल्डर' के समान उदाहरण का संदर्भ है, वह आपके 'ऑब्जेक्ट ए' को बदल सकता है। यदि आप एक परिवर्तनीय वस्तु चाहते हैं, तो निर्माता के लिए कोई आवश्यकता नहीं है: बस अपने 'ऑब्जेक्ट ए' पर सेटर्स रखें। –

+0

यह एक बहुत अच्छा जवाब है। यह सच है कि मैं नहीं चाहता कि ए कन्स्ट्रक्टर के बाद बदला जाए। यही कारण है कि मैंने बिल्डर को पहली जगह इस्तेमाल किया। –

उत्तर

7

एक निर्माता का उपयोग करने के लिए एक बड़ा कारण है एक अपरिवर्तनीय वस्तु बनाने के लिए: निर्माता म्यूटेबल है, जो चीज बनाता है वह आवश्यक नहीं है (जरूरी)।

यदि आप निर्माता को प्रतिनिधि देते हैं, तो आपका उदाहरण फिर से म्यूटेबल होगा: ObjectBuilder के उसी उदाहरण का संदर्भ रखने वाले किसी भी व्यक्ति को ObjectA बदल सकता है। इसका मतलब है कि निर्माण समय पर ObjectA की स्थिति की वैधता पर आपके द्वारा किए गए किसी भी चेक को अमान्य किया जा सकता है।

यदि आप एक म्यूटेबल ऑब्जेक्ट चाहते हैं, तो निर्माता के लिए कोई आवश्यकता नहीं है: बस अपने ObjectA पर सेटर्स रखें।

+2

यदि आप एक म्यूटेबल ऑब्जेक्ट चाहते हैं, तो बिल्डर के लिए _less_ की आवश्यकता है। बिल्डर्स केवल अपरिवर्तनीयता से अधिक के लिए अच्छे हैं। – jaco0646

+0

@ एंडी टर्नर मेरे पास बिल्डर पैटर्न [यहां] (http://stackoverflow.com/questions/41206286/how-to-clone-old-builder-to-make-a-new-builder-object) पर समान प्रश्न है। यह देखना चाहता था कि क्या आप वहां पर मेरी मदद कर सकते हैं। –

संबंधित मुद्दे