A StringBuilder
बिल्डर पैटर्न के समान है, लेकिन इस डिज़ाइन पैटर्न के GoF विवरण के साथ अधिक साझा नहीं करता है। डिजाइन पैटर्न का मूल बिंदु था
एक जटिल वस्तु के निर्माण को उसके प्रतिनिधित्व से अलग करें ताकि एक ही निर्माण प्रक्रिया अलग-अलग प्रतिनिधित्व बना सके।
- गामा, हेल्म, जॉनसन, Vlissides द्वारा डिजाइन पैटर्न से ।
(ध्यान दें: "जटिल" का अर्थ मुख्य रूप से "कई भागों से बना" होता है, जरूरी नहीं कि "जटिल" या "कठिन" हो।
"विभिन्न अभ्यावेदन" यहाँ प्रमुख है। जैसे इस निर्माण प्रक्रिया को मानते हुए:
interface ArticleBuilder {
void addTitle(String title);
void addParagraph(String paragraph);
}
void createArticle(ArticeBuilder articleBuilder) {
articleBuilder.addTitle("Is String Builder an application of ...");
articleBuilder.addParagraph("Is the Builder Pattern restricted...");
articleBuilder.addParagraph("The StringBuilder class ...");
}
हम एक HtmlDocument
या एक के साथ समाप्त हो सकते हैं TexDocument
या MarkdownDocument
क्या ठोस कार्यान्वयन प्रदान किया जाता है पर निर्भर करता है:
class HtmlDocumentBuilder implements ArticleBuilder {
...
HtmlDocument getResult();
}
HtmlDocumentBuilder b = new HtmlDocumentBuilder();
createArticle(b);
HtmlDocument dom = b.getResult();
तो बिल्डर पैटर्न का एक केंद्रीय बिंदु बहुरूपता है । डिज़ाइन पैटर्न बुक इस पैटर्न की तुलना एब्सट्रैक्ट फ़ैक्टरी से करती है:
एब्सट्रैक्ट फैक्ट्री बिल्डर के समान है कि यह भी जटिल वस्तुओं का निर्माण कर सकता है। प्राथमिक अंतर यह है कि बिल्डर पैटर्न कदम से एक जटिल वस्तु कदम के निर्माण पर केंद्रित है। […] बिल्डर उत्पाद को अंतिम चरण के रूप में लौटाता है, लेकिन जहां तक सार फैक्टरी का संबंध है, उत्पाद तुरंत वापस आ जाता है।
- गामा, हेल्म, जॉनसन, Vlissides द्वारा डिजाइन पैटर्न से ।
यह चरण-दर-चरण पहलू तब बिल्डर पैटर्न का अधिक लोकप्रिय पहलू बन गया है, ताकि आम बोलचाल में बिल्डर पैटर्न को इस तरह समझा जाए:
किसी ऑब्जेक्ट को कई चरणों में विभाजित करना। इससे हम उन तर्कों या वैकल्पिक मापदंडों का उपयोग कर सकते हैं जो इन भाषाओं में भी इन सुविधाओं का समर्थन नहीं करते हैं।
विकिपीडिया इस तरह से पैटर्न को परिभाषित करता है:
बिल्डर पैटर्न ऑब्जेक्ट निर्माण सॉफ्टवेयर डिज़ाइन पैटर्न है। अमूर्त कारखाने पैटर्न और कारखाने विधि पैटर्न के विपरीत जिसका उद्देश्य बहुरूपता को सक्षम करना है, बिल्डर पैटर्न का इरादा दूरबीन निर्माण विरोधी पैटर्न [उद्धरण वांछित] का समाधान खोजना है । [...]
बिल्डर पैटर्न का एक और फायदा है। इसका उपयोग उन वस्तुओं के लिए किया जा सकता है जिनमें समतल डेटा (html कोड, SQL क्वेरी, X.509 प्रमाणपत्र ...) होता है, ऐसा कहना है, डेटा जिसे आसानी से संपादित नहीं किया जा सकता है। इस प्रकार के डेटा को चरण दर चरण संपादित नहीं किया जा सकता है और इसे एक ही बार में संपादित किया जाना चाहिए। इस तरह के ऑब्जेक्ट के निर्माण का सबसे अच्छा तरीका बिल्डर क्लास का उपयोग करना है। [प्रशस्ति पत्र की जरूरत]
- विकिपीडिया पर बिल्डर पैटर्न से , विभिन्न योगदानकर्ताओं द्वारा।
इसलिए जैसा कि हम देख सकते हैं, इस नाम का वास्तव में कोई आम समझ नहीं है कि यह किस पैटर्न को संदर्भित करता है, और कुछ बिंदुओं में विभिन्न परिभाषाएँ एक दूसरे के विपरीत भी हैं (जैसे कि बिल्डर्स के लिए बहुरूपता की प्रासंगिकता के बारे में)।
StringBuilder
पैटर्न की विभिन्न व्याख्याओं के साथ एकमात्र सामान्य संपत्ति यह है कि उत्पाद को एक बार में जाने के बजाय चरण दर चरण बनाया जाता है। यह डिज़ाइन पैटर्न के GoF परिभाषा की एक सख्त रीडिंग को पूरा नहीं करता है, लेकिन कृपया ध्यान दें कि डिज़ाइन पैटर्न संचार को सुविधाजनक बनाने के लिए निंदनीय अवधारणाएं हैं। मैं StringBuilder
बिल्डर पैटर्न का एक उदाहरण जारी रखना चाहूंगा , यद्यपि यह एक असामान्य है - जावा में उस संरचना का मुख्य कारण अपरिवर्तनीय तारों की उपस्थिति में प्रदर्शन समवर्ती है, लेकिन कुछ दिलचस्प ऑब्जेक्ट-ओरिएंटेड डिज़ाइन नहीं है।