为什么BUILDER Pattern比javaBean更安全?

时间:2012-11-02 02:38:45

标签: java

作为标题,我正在阅读<Effective Java>,但当我阅读第2章时,它说

2 个答案:

答案 0 :(得分:1)

当对象不可变时,与对象(如JavaBeans) mutable 相比,您更不用担心了。一旦你有了一个不可变对象,它基本上不受线程同步问题的影响,你可以自由地传递它而不需要制作防御性副本(以保护用户或善意的库方法不改变数据)。

自然地,创建一个可变对象可能很棘手,并且可能涉及构造函数太长而无法管理。这是Builder模式可以帮助您的地方 - 使用可变构建器创建初始状态,然后将其复制到该对象构造函数中的不可变对象。

请注意,如果不可变对象包含对任何可变对象的引用,则外部对象实际上不是不可变的。您可以在Guava中找到ImmutableListImmutableMapImmutableSet

答案 1 :(得分:0)

Builder模式更安全,因为Builder可以在将所有参数传递给构造函数之前验证它们。

您可能会从谷歌手中找到Preconditions

更不用说,使用Builder可以非常简洁地构建复杂对象。

我不会说构建器模式后面的对象比immutable更多或更少JavaBean或可变。{{1}}。这取决于您如何声明字段以及您公开的方法。