为什么JavaBuilder模式优于JavaBean模式 Joshua Bloch在有效java中提出,如果我们面临一个场景,在这个场景中,我们的bean中有很多字段,我们应该考虑使用Suilder模式来实现伸缩或java bean模式。读了这本书的一段解释性摘录后,我偶然发现了不变量这个词。我考虑了很多不变量的情况,但没有想到有一种情况我们不能强制用户使用不变性中涉及的必要字段,只提供此类签名的构造函数。但是做这样的事情好吗?我们可以在构建器模式中使用什么不变性来确保我们在需要时使用模式,而不仅仅是为了它

为什么JavaBuilder模式优于JavaBean模式 Joshua Bloch在有效java中提出,如果我们面临一个场景,在这个场景中,我们的bean中有很多字段,我们应该考虑使用Suilder模式来实现伸缩或java bean模式。读了这本书的一段解释性摘录后,我偶然发现了不变量这个词。我考虑了很多不变量的情况,但没有想到有一种情况我们不能强制用户使用不变性中涉及的必要字段,只提供此类签名的构造函数。但是做这样的事情好吗?我们可以在构建器模式中使用什么不变性来确保我们在需要时使用模式,而不仅仅是为了它,java,design-patterns,Java,Design Patterns,我们真的无法想象这样一种情况,即我们不能通过仅提供此类签名的构造函数来强制用户使用涉及不变性的必要字段 这是真的。然而,如果你有3个,也许4个参数,这可能是好的。从5开始,您的构造函数将开始非常长 我们可以在构建器模式中使用什么不变性来确保我们在需要时使用模式,而不仅仅是为了它 构建器本身没有不变量;它是可变的,非线程安全的。但是,它可以生成具有大量不变量的类。即使是不变的类;而且它们有很多优点(例如,它们本质上是线程安全的) 使用生成器的另一大优点是,您可以在生成器本身中检查参数的正确性,并避

我们真的无法想象这样一种情况,即我们不能通过仅提供此类签名的构造函数来强制用户使用涉及不变性的必要字段

这是真的。然而,如果你有3个,也许4个参数,这可能是好的。从5开始,您的构造函数将开始非常长

我们可以在构建器模式中使用什么不变性来确保我们在需要时使用模式,而不仅仅是为了它

构建器本身没有不变量;它是可变的,非线程安全的。但是,它可以生成具有大量不变量的类。即使是不变的类;而且它们有很多优点(例如,它们本质上是线程安全的)

使用生成器的另一大优点是,您可以在生成器本身中检查参数的正确性,并避免在构造函数中进行所有这些检查


更不用说,如果你有几个构造函数,你很可能不得不重复检查。使用构建器,您只需在相应的
.With*()
method.

fge==>我大体上同意使用Builder模式生成不可变类和线程安全类,但即使看起来很幼稚,我仍然对术语不变量有点困惑,到底什么是bean中的不变量?这是一个字段对另一个字段的依赖性吗?因此,如果我们在依赖性之前初始化依赖性字段,那么它将导致非法状态?实例的不变量是一个字段,在该实例的生存期内永远不会更改。在一个bean中,实际上根本没有不变量。。。至少在“纯”bean中是这样。至于字段依赖项,如果您使用生成器,那么您可以在使用.build()时检查这些依赖项好的。。。谢谢。。。它的简单不变量(不变)。谢谢你的精彩解释。我甚至在我的几个项目中通过我称之为“冻结/解冻”-->我可以从不可变的实例生成构建器,这是两个非常非常简单的接口