जब मैं जोश की ब्लोच पुस्तक में बिल्डर पैटर्न की समीक्षा कर रहा था, तो मैं सरल कार्यान्वयन के साथ आया, लेकिन मुझे यकीन नहीं है कि यह उचित है या नहीं। उदाहरण के लिए: यह अभी भी एक बिल्डर पैटर्न के रूप में माना जा सकता हैकम वर्बोज़ बिल्डर पैटर्न?
public class Test {
public static void main(String[] args) {
Numbers first = new Numbers.Builder().setD(3.14).build();
System.out.println(first);
Numbers second = new Numbers.Builder().setI(17).setF(1.24F).build();
System.out.println(second);
System.out.println(first);
}
}
final class Numbers {
private int i;
private long l;
private float f;
private double d;
private Numbers() {}
public static class Builder {
private final Numbers instance = new Numbers();
public Builder setI(int i) {
instance.i = i;
return this;
}
public Builder setL(long l) {
instance.l = l;
return this;
}
public Builder setF(float f) {
instance.f = f;
return this;
}
public Builder setD(double d) {
instance.d = d;
return this;
}
public Numbers build() {
return instance;
}
}
@Override
public String toString() {
return String.format("%4d %4d %7.3f %7.3f", i, l, f, d);
}
}
है या मैं कुछ छूट गया हो?
संपादित
इस बारे मेंक्या?
//...
private Numbers() {}
private Numbers(Numbers o) {
i = o.i;
l = o.l;
f = o.f;
d = o.d;
}
public static class Builder {
private final Numbers instance = new Numbers();
//...
public Numbers build() {
return new Numbers(instance);
}
}
इस दृष्टिकोण के साथ एक बड़ी समस्या यह है कि यदि आप एक ही निर्माता पर कई बार बिल्ड() कहते हैं, तो आप हर बार एक ही उदाहरण के साथ समाप्त होते हैं। –
@ जेबी निजेट ओह, दाएं, बिल्डर सार्वजनिक है-_- ty – Dmytro
बिल्ड() विधि –