जावा और सी # में, आप उन गुणों के साथ एक ऑब्जेक्ट बना सकते हैं जो किसी निर्माणकर्ता को मापदंडों के साथ परिभाषित करके, ऑब्जेक्ट के निर्माण के बाद प्रत्येक संपत्ति को परिभाषित करके या बिल्डर / तरल पदार्थ इंटरफ़ेस पैटर्न का उपयोग करके निर्धारित किया जा सकता है। हालाँकि, C # 3 ने ऑब्जेक्ट और कलेक्शन इनिशियलाइज़र्स को पेश किया, जिसका मतलब था कि बिल्डर पैटर्न काफी हद तक बेकार था। बिना इनिशियलाइज़र्स वाली भाषा में, कोई बिल्डर लागू कर सकता है, फिर उसका उपयोग इस तरह से कर सकता है:
Vehicle v = new Vehicle.Builder()
.manufacturer("Toyota")
.model("Camry")
.year(1997)
.colour(CarColours.Red)
.addSpecialFeature(new Feature.CDPlayer())
.addSpecialFeature(new Feature.SeatWarmer(4))
.build();
इसके विपरीत, C # में एक लिख सकता है:
var vehicle = new Vehicle {
Manufacturer = "Toyota",
Model = "Camry",
Year = 1997,
Colour = CarColours.Red,
SpecialFeatures = new List<SpecialFeature> {
new Feature.CDPlayer(),
new Feature.SeatWarmer { Seats = 4 }
}
}
... एक बिल्डर की आवश्यकता को समाप्त करना जैसा कि पिछले उदाहरण में देखा गया है।
इन उदाहरणों के आधार पर, क्या बिल्डर अभी भी C # में उपयोगी हैं, या वे पूरी तरह से इनिशियलाइज़र द्वारा अधिगृहीत किए गए हैं?
are builders useful
मैं इस प्रकार के प्रश्नों को क्यों देखता रहूं? एक बिल्डर एक डिज़ाइन पैटर्न है - निश्चित रूप से, इसे एक भाषा सुविधा के रूप में उजागर किया जा सकता है लेकिन दिन के अंत में यह सिर्फ एक डिज़ाइन पैटर्न है। एक डिज़ाइन पैटर्न "गलत" नहीं हो सकता। यह आपके उपयोग के मामले को पूरा कर सकता है या नहीं भी कर सकता है, लेकिन यह पूरे पैटर्न को गलत नहीं बनाता है, बस इसका अनुप्रयोग। याद रखें कि दिन के अंत में डिज़ाइन पैटर्न विशेष समस्याओं को हल करते हैं - यदि आप समस्या का सामना नहीं करते हैं, तो आप इसे हल करने का प्रयास क्यों करेंगे?