作为标题,我正在阅读<Effective Java>
,但是当我阅读第 2 章时,它说
问问题
190 次
2 回答
2
当对象是不可变的时,与对象(如 JavaBeans)是可变的时相比,您不必担心太多。一旦你有了一个不可变对象,它基本上就不会受到线程同步问题的影响,并且你可以自由地传递它而无需制作防御性副本(以保护用户或善意的库方法不更改数据)。
自然地,创建一个可变对象可能很棘手,并且可能涉及构造函数太长而无法管理。这就是 Builder 模式可以帮助您的地方——使用可变的 Builder 来创建初始状态,然后将其复制到该对象的构造函数中的不可变对象。
请注意,如果不可变对象包含对任何可变对象的引用,则外部对象并不是真正不可变的。您可能会在GuavaImmutableList
中找到、ImmutableMap
和ImmutableSet
方便。
于 2012-11-02T02:46:39.743 回答
0
该Builder
模式更安全,因为 Builder 可以在将所有参数传递给构造函数之前验证所有参数。
您可能会Preconditions
从 Google 找到这方面的便利。
更不用说,使用 Builder 可以非常简洁地构造复杂的对象。
我不会说遵循构建器模式的对象immutable
与JavaBean
. 这取决于您如何声明字段以及您公开哪些方法。
于 2012-11-02T04:07:14.870 回答