生成器模式在哪里申请

时间:2015-06-16 05:17:48

标签: java design-patterns

您好我对构建器设计模式有疑问。从复数视频中我了解到这种模式用于避免可变类中伸缩构造函数的复杂性。 其他一些网站将其解释为通过将构建器保持为组合来开发或构建复杂对象的方式。我完全感到困惑。请澄清一下吗?

1 个答案:

答案 0 :(得分:2)

复杂的构造函数对于不可变或可变类很不好。

大构造函数(或构造函数的层次结构)的一个问题是,最终可能会出现一个用于多种用途的大型构造函数。例如,如果要创建一个全新的对象,某些参数可能是null,但是当您从其他位置调用它时,它们不能为空。

弄清楚如何使用这些构造函数很痛苦。即使他们已经内置验证,您仍然必须检查您是否以正确的方式创建它。构建器可以有方法提供提示或强制人们以正确的方式创建它。例如builder.copy(obj).setName("newObj").build()。这提供了有关如何复制对象的提示,它可能比通过构造函数查找正确的对象更好。

另一个问题是你必须提供所有必需的构造函数args。即使有明智的默认值,您也可能被迫提供某些东西。构建器可以包含默认值,因此您只需设置您感兴趣的参数。

另一个问题是一个大的构造函数可能在一行中有多个相同类型的参数。它要求某人意外地窃听错误的值。构建器强制您调用具有有意义名称的方法。

构建器也具有与静态工厂相同的优势。它可以返回接口而不是具体类型。这很好,因为您鼓励客户端类使用该接口。

评论中的链接答案有更多理由。