【问题标题】:Effective Java: Builder Pattern有效的 Java:构建器模式
【发布时间】:2014-09-22 11:52:03
【问题描述】:

我正在阅读 Effective java item#2- The Builder pattern

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; }
}

请注意,我将所有成员变量都设为 Final

现在可以这样创建一个实例:

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

如果我这样做有什么问题?有人可以帮我理解吗? 谢谢, 拉詹

【问题讨论】:

  • 这本书主要说JavaBeans在创建实例时不是线程安全的。它还建议您将可选(非主要)属性的初始化过程放到 Builder 中。另一件事是,您应该在将代码放在这里之前对其进行测试。

标签: java builder factory-pattern effective-java


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    相关资源
    最近更新 更多