有效的Java:Builder模式

时间:2014-09-22 11:52:03

标签: java builder factory-pattern effective-java

我正在阅读有效的java项目#2-构建器模式

http://www.informit.com/articles/article.aspx?p=1216151&seqNum=2

这里说java bean不是创建具有多个参数的对象的有效方法。 但是如果我以这种方式拥有javabean会怎么样:

// JavaBeans Pattern 
public class NutritionFacts {
private final int servingSize ;
private final int servings  ;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public NutritionFacts() { }
// Setters
public void setServingSize(int val) { servingSize = val; }
public void setServings(int val) { servings = val; }
public void setCalories(int val) { calories = val; }
public void setFat(int val) { fat = val; }
public void setSodium(int val) { sodium = val; }
public void setCarbohydrate(int val) { carbohydrate = val; }
}

请注意,我将所有成员变量设为最终

现在可以通过这种方式创建实例:

NutritionFacts cocaCola = new NutritionFacts();
cocaCola.setServingSize(240);
cocaCola.setServings(8);
cocaCola.setCalories(100);
cocaCola.setSodium(35);
cocaCola.setCarbohydrate(27);

如果我这样做,怎么会错?有人可以帮我理解吗? 谢谢, 拉詹

1 个答案:

答案 0 :(得分:4)

你甚至没有尝试编译它,因为不幸的是它会失败。这是因为你声明了一个变量final,它必须在构造函数完成时初始化。

这无疑是为什么最终变量的setter没有意义,也是为什么Builder模式经常被用来解决这个问题的原因。