2011-03-08 17 views
13

मैं डिजाइन पैटर्न में नया हूं इसलिए मेरे पास बिल्डर पैटर्न के बारे में एक सवाल है। आज मैंने सुना है कि बिल्डर पैटर्न जावा, सी # में कक्षा StringBuilder से अलग है। मुझे पता है कि बिल्डर पैटर्न का मुख्य लक्ष्य कुछ चरणों में जटिल वस्तुओं को बनाना है ... मुझे लगता है कि यह StringBuilder है, इसकी विधि Append ... इसलिए मेरे लिए अंतर खोजने के लिए शायद ही मुश्किल है ...स्ट्रिंगबिल्डर और बिल्डर पैटर्न

क्या आप मुझे बता सकते हैं कि वास्तव में कोई अंतर है और यदि यह है ... यह क्या है :)?

उत्तर

13

ऐसा लगता है कि आप कक्षा स्ट्रिंगबिल्डर और बिल्डर डिजाइन पैटर्न को भ्रमित कर सकते हैं। वे वास्तव में दो बहुत अलग विचार हैं।

(MSDN से) स्ट्रिंग ऑब्जेक्ट अपरिवर्तनीय है:

StringBuilderJava में एक वर्ग और .NET कि अधिक performant स्ट्रिंग आपरेशन अनुमति देता है। प्रत्येक समय जब आप सिस्टम में से किसी एक विधि का उपयोग करते हैं। स्ट्रिंग क्लास, आप स्मृति में एक नया स्ट्रिंग ऑब्जेक्ट बनाते हैं, जो को के लिए नई ऑब्जेक्ट की आवश्यकता है। ऐसी परिस्थितियों में जहां आपको स्ट्रिंग में संशोधनों को बार-बार करने की आवश्यकता है, नई स्ट्रिंग ऑब्जेक्ट बनाने के साथ जुड़े ओवरहेड महंगा हो सकता है। System.Text.StringBuilder क्लास हो सकता है जब आप एक नई ऑब्जेक्ट बनाये बिना स्ट्रिंग को संशोधित करना चाहते हैं। उदाहरण के लिए, स्ट्रिंगबिल्डर वर्ग का उपयोग करके प्रदर्शन को बढ़ावा दे सकता है जब एक लूप में कई तारों को एक साथ जोड़कर प्रदर्शन को बढ़ावा दे सकता है।

बिल्डर पैटर्न एक सॉफ्टवेयर डिजाइन पैटर्न है:

Builder Pattern दूसरी तरफ एक डिजाइन पैटर्न जो कक्षाओं और/या इंटरफेस जटिल कोड को व्यवस्थित करने के लिए होती का एक सेट है। ऑब्जेक्ट्स के निर्माण के अमूर्त कदमों का इरादा है ताकि अलग-अलग इन चरणों के कार्यान्वयन ऑब्जेक्ट्स के विभिन्न प्रस्तुतियों का निर्माण कर सकें। अक्सर, बिल्डर पैटर्न के अनुसार समग्र पैटर्न, संरचनात्मक पैटर्न के अनुसार उत्पादों का निर्माण करने के लिए उपयोग किया जाता है।

AppendStringBuilder की विधि मौजूदा स्ट्रिंग में अधिक वर्ण जोड़ती है। कोई नई वस्तुएं नहीं बनाई गई हैं (बिल्डर पैटर्न का मूल कार्य) और इसमें कोई डिज़ाइन पैटर्न शामिल नहीं है। यह एक ऑब्जेक्ट उदाहरण के लिए एक विधि विधि है।

+2

आपका स्वागत है। और एसओ में आपका स्वागत है! –

+0

+1 अच्छी टिप्पणी। – Nilesh

+0

क्या आप किसी भी संदर्भ का उद्धरण दे सकते हैं जो कहता है कि जब हम बिल्डर पैटर्न का उपयोग कर रहे हैं तो नई वस्तुएं मिडवे में बनाई गई हैं? या शायद मुझे आपका बयान गलत हो गया है। कृपया स्पष्ट करें। –

5
  1. अलग-अलग उद्देश्य। स्ट्रिंग बिल्डर स्ट्रिंग कंस्ट्रक्शन के साथ मदद करता है, बिल्डर पैटर्न किसी ऑब्जेक्ट के निर्माण को इसके प्रतिनिधित्व से अलग करता है।
  2. विभिन्न संरचना। स्ट्रिंग बिल्डर के दो सहयोगी हैं, बिल्डर पैटर्न में चार सहयोगी हैं।

विज्ञापन 1) स्ट्रिंग के निर्माण में कोई अमूर्तता नहीं है। उदा।, वृक्ष संरचना अमूर्त है, जिसे वस्तुओं या एक्सएमएल फ़ाइल (कार्यान्वयन) द्वारा प्रदर्शित किया जा सकता है।

विज्ञापन 2)StringBuilder वस्तु का उपयोग कर, देखते हैं दो सहयोगियों:

    :

    1. Client
    2. StringBuilder

    जब Builder Pattern का उपयोग कर, चार सहयोगियों कर रहे हैं 0

  1. Director - यह Abstract Builder से कहता निर्माण कदम हैं (वृक्ष संरचना के मामले में, कदम हैं:, जड़ बनाने के बच्चे को जोड़ने के लिए, ...) क्या
  2. Abstract Builder - Director द्वारा प्रयोग किया जाता अमूर्त है।
  3. Concrete Builder - Director से कहता निर्माण शुरू करने के लिए - Abstract Builder के ठोस कार्यान्वयन (XMLBuilder, ObjectBuilder, हो सकता है ...)
  4. Client है।
+0

+1 मुझे इस तरह से वस्तुओं और उनकी बातचीत पर चर्चा करते समय सहयोगियों के विचार पसंद हैं। आप क्लाइंट कोड, क्लाइंट/सर्वर संबंधों के बारे में हर समय सुनते हैं लेकिन सहयोगी, यह मेरे लिए नया है। क्या आपके पास एक लेख के लिए एक लिंक आसान होगा जो विचार पर विस्तार करेगा? धन्यवाद! –

0

दस्तावेज़ीकरण का विश्लेषण, मैं कह सकता हूं कि स्ट्रिंगबिल्डर संबंधित पैटर्न का उपयोग नहीं करता है। यह Composite pattern का उपयोग करता है। बिल्डर पैटर्न "मैन्युअल रूप से आपके हाथों से चरण-दर-चरण" या लूप में ऑब्जेक्ट नहीं एकत्र करता है। इसमें तैयार किए गए समाधान हैं।

+0

मुझे नहीं लगता कि यह वास्तव में 'समग्र पैटर्न' के विवरण को फिट करता है, क्योंकि यह पैटर्न फिट बैठता है - मुझे नाम नहीं पता - संबंधित अपरिवर्तनीय और परिवर्तनीय कक्षाओं की एक जोड़ी होने के नाते, जैसे एक अपरिवर्तनीय वस्तु राज्य को एक परिवर्तनीय वस्तु में कॉपी किया जा सकता है, और एक परिवर्तनीय वस्तु की स्थिति को एक नए अपरिवर्तनीय वस्तु में कॉपी किया जा सकता है। कोड तब कुछ वांछित स्थिति उत्पन्न करने के लिए कुशलतापूर्वक एक unshared mutable ऑब्जेक्ट में हेरफेर कर सकता है, और उसके बाद उसे उसी राज्य को encapsulating एक अचल अपरिवर्तनीय वस्तु उत्पन्न करने के लिए कह सकते हैं। – supercat

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