मेरे पास "प्रभावी जावा" में शामिल "बिल्डर पैटर्न" से संबंधित एक प्रश्न था। पैटर्न को सही तरीके से कार्यान्वित करने के लिए हमें विधि की आवश्यकता है?क्या हमें बिल्डर पैटर्न में .build() विधि चाहिए?
public class CoffeeDrink {
private int numEspressoShots;
private short milkType;
private boolean withWhip;
private CoffeeDrink() {
}
public static CoffeeDrink buildNewDrink() {
return new CoffeeDrink();
}
public CoffeeDrink withEspresso(int n) {
this.numEspressoShots = n;
return this;
}
public CoffeeDrink withMilkType(shot t) {
this.milkType = t;
return this;
}
public CoffeeDrink withWhip() {
this.withWhip = true;
return this;
}
}
और फिर हम उसका उपयोग कैसे:
CoffeeDrink c = CoffeeDrink.buildNewDrink()
.withEspresso(2)
.withMilkType(2)
.withWhip();
यह अभी भी मान्य है, तो मैं एक स्थिर भीतरी Builder
वर्ग की जरूरत नहीं है नहीं होगा उदाहरण के लिए, मान लें कि हम निम्नलिखित वर्ग डालते हैं? मुझे लगता है कि फायदे में से एक यह है कि यह CoffeeDrink
ऑब्जेक्ट बनाने से रोकता है जब तक कि विधि .build()
को कॉल नहीं किया जाता है, लेकिन मैं अभी भी Builder
ऑब्जेक्ट बना रहा हूं। बस कुछ स्पष्टीकरण मांगना।
बिल्डर पैटर्न अपरिवर्तनीय वर्गों के साथ महान लाभ के लिए प्रयोग किया जाता है। उनके साथ, बिल्डर एक उत्परिवर्ती "सहायक" वर्ग है जो अंतिम उत्पाद के अंतिम निर्माण में सहायता करता है जो उसके बाद अपरिवर्तनीय है। आपका उदाहरण केवल एक साधारण POJO है और यह जावाबीन के नुकसान को साझा करता है (उत्परिवर्तनीय, अपूर्ण या असंगत स्थिति में देखा जा सकता है)। – scottb