我在这里阅读有关构建器模式的好处:http://drdobbs.com/java/208403883?pgno=2
我想知道以下的可行性,这似乎更简单。
public class NutritionFactParams {
private int servingSize;
private int servings;
private int fat_ = 0;
private int sodium_ = 0;
NutritionFactParams(int servingSize, int servings) {
this.servingSize = servingSize;
this.servings = servings;
}
NutritionFactParams fat(int fat) {
this.fat_ = fat;
return this;
}
NutritionFactParams sodium(int sodium) {
this.sodium_ = sodium;
return this;
}
}
public class NutritionFacts {
public NutritionFacts(NutritionFactParams params) {
// copy values across, or store NutritionFactParams as member
}
}
public class Main {
public static void main(String args[]) {
NutritionFacts n = new NutritionFacts(new NutritionFactParams(1,2).fat(23).soduim(10));
}
}
这基本上是构建器模式,除了NutritionFacts构造函数是public而不是private,我们在NutritionFacts中没有静态Builder类,并且构建器上没有build()方法。没有替代或默认构造函数,因此如果没有首先构建NutritionFactsParams,就无法构建NutritionFact。
答案 0 :(得分:3)
差异并不大,但我能想到一个重要的差异:
如果您使用构建器,客户端代码不需要知道您在构建()上实际返回的Impl,这意味着您可以根据配置(构建器)灵活地返回不同的Impl。另一方面,使用构造函数,客户端必须显式创建Impl。
答案 1 :(得分:2)
当您想要创建不可变对象但避免使用具有许多参数的构造函数时,构建器模式特别有用。
您使用的模式基本上只是fluent interface。构建器模式的应用程序通常使用一个流畅的接口。
另见:
如果您不喜欢使用构建器模式的额外代码开销,请查看make-builder。