मैंने बिल्डर पैटर्न (मुख्य रूप से जावा में) के कई कार्यान्वयन देखे हैं। उन सभी में एक इकाई वर्ग (चलो एक Personवर्ग कहते हैं ), और एक बिल्डर वर्ग है PersonBuilder। बिल्डर विभिन्न प्रकार के फ़ील्ड "स्टैक" करता है और new Personपारित किए गए तर्कों के साथ वापस लौटता है । हमें सभी बिल्डर तरीकों को Personकक्षा में रखने के बजाय स्पष्ट रूप से एक बिल्डर वर्ग की आवश्यकता क्यों है?
उदाहरण के लिए:
class Person {
private String name;
private Integer age;
public Person() {
}
Person withName(String name) {
this.name = name;
return this;
}
Person withAge(int age) {
this.age = age;
return this;
}
}
मैं बस कह सकता हूं Person john = new Person().withName("John");
PersonBuilderवर्ग की आवश्यकता क्यों है ?
एकमात्र लाभ जो मुझे दिखाई देता है, क्या हम Personखेतों को finalइस प्रकार घोषित कर सकते हैं , इस प्रकार अपरिवर्तनीयता सुनिश्चित करते हैं।
withNameकेवल नाम फ़ील्ड में परिवर्तन के साथ व्यक्ति की एक प्रति वापस कर सकता हूं । दूसरे शब्दों में, Person john = new Person().withName("John");काम कर सकता है भले ही Personअपरिवर्तनीय है (और यह कार्यात्मक प्रोग्रामिंग में एक सामान्य पैटर्न है)।
voidतरीकों से बचें । इसलिए, उदाहरण के लिए यदि Personउनके नाम पर एक विधि है जो उनके नाम को प्रिंट करता है, तो आप अभी भी इसे धाराप्रवाह इंटरफ़ेस के साथ जोड़ सकते हैं person.setName("Alice").sayName().setName("Bob").sayName()। वैसे, मैं अपने सुझाव के साथ JavaDoc में उन लोगों की व्याख्या करता हूं @return Fluent interface- यह सामान्य और स्पष्ट है जब यह किसी भी विधि पर लागू होता है return thisजो इसके निष्पादन के अंत में होता है और यह काफी स्पष्ट है। तो, एक बिल्डर एक धाराप्रवाह इंटरफ़ेस भी करेगा।
chainable setters: D