因此,在着名的Effective Java書中,它引入了一個構建模式,您可以在其中有一個內部靜態生成器類來實例化一個類。這本書提出的一類以下設計:正如Effective Java中所描述的,嵌套的Builder類是非常必要的嗎?
public class Example {
private int a;
private int b;
public static class Builder() {
private int a;
private int b;
public Builder a(int a) {
this.a = a;
return this;
}
public Builder b(int b) {
this.b = b;
return this;
}
public Example build() {
return new Example(this);
}
}
private Example(Builder builder) {
this.a = builder.a;
this.b = builder.b;
}
}
但是我沒能理解爲什麼我們真的需要一個內部Builder class
?上面的代碼有重複的字段聲明行(int a,b),如果我們有更多的字段,這將變得相對混亂。
爲什麼不只是擺脫Builder
類,並讓Example
類承擔Builder
類中的所有set
方法?
所以實例Example
,它將成爲Example e = new Example().a(3).b.(3);
代替Example e = new Example.Builder.a(3).b(3).build();
注:這本書表明,這種模式對於具有參數的長列表進行設置類。
它對於生成不可變對象最有用。 – shmosel
在一些複雜初始化的情況下,您的值應該已經設置。另外,使用'a()'和'b()'方法可以使'Example'對象變爲可變的。 – EpicPandaForce
對於這種情況,生成器不是必需的,實際上使代碼更加冗長。 –