【发布时间】:2016-04-05 05:47:35
【问题描述】:
因此,在著名的Effective Java 一书中,它介绍了一种Builder 模式,您可以在其中拥有一个内部静态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();
注意:对于需要设置一长串参数的类,本书建议使用此模式。
【问题讨论】:
-
对于生成不可变对象最有用。
-
在某些复杂初始化的情况下,你的值应该已经设置好了。此外,拥有
a()和b()方法会使Example对象可变。 -
在这种情况下不需要生成器,实际上使代码更加冗长。
-
@shmosel EpicPandaForce 所以我猜这个模式主要是为了支持不可变类。谢谢!
标签: java design-patterns builder