मैंने बिल्डर पैटर्न (मुख्य रूप से जावा में) के कई कार्यान्वयन देखे हैं। उन सभी में एक इकाई वर्ग (चलो एक 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