我创建了一个包含许多字段的类,我希望根据一些默认值初始化它们,同时根据我的需要设置几个字段。我为这个类交叉了两个解决方案。内联字段初始化和构建器。任何意见?我知道构建器模式很流行,但为什么不使用默认的内联字段初始化?
//Inline field initialization:
class foo{
int a = 0;
int b = 1;
public foo setA(int a){this.a = a; return this;}
public foo setB(int b){this.b = b; return this;}
}
//use foo
foo f = new foo().setA(1).setB(2);
//builder
class bar(){
int a;
int b;
bar(int a, int b){this.a = a; this.b = b}
public static class Builder(){
int a = 0;
int b = 0;
public bar build(){
return new bar(a, b);
}
public Builder a(int a){this.a = a; return this;}
public Builder b(int b){this.b = b; return this;}
}
}
// use
bar b = bar.Builder.build().a(1).b(2);
答案 0 :(得分:1)
面对许多构造函数参数时,需要考虑构建器模式。
使用大量可选参数,构造函数不能很好地扩展
请参阅:有效Java中的第2项http://www.informit.com/articles/article.aspx?p=1216151&seqNum=2
如果你的字段数不会增加到很多,那么我宁愿选择Inline字段初始化,因为这意味着编写的代码总是很好。
答案 1 :(得分:0)
使用构建器模式的主要优点是它允许您以任何顺序提供参数。例如,使用内联字段时,您应始终按此顺序传递a
和b
。使用构建器,您可以按任何顺序传递它们。当构造函数的参数数量变得太大时,无论是否创建不可变对象,构建器模式肯定会有所帮助。