构造函数模式解决的一个典型问题是需要对许多字段和嵌套对象进行费力的、逐步的初始化。在这种情况下,您将拥有一个带有许多参数的构造函数,或者参数分散在整个客户端代码中。
例如,您可以拥有一个具有四堵墙、一层地板、一扇门和一个天花板的Home对象。然而,如果你想拥有一个更大的房子(家),有更多的光线,有后院和更多的窗户,以及建造房子的其他典型配件,等等......你的建造者会变得可怕,而你也不会总是需要大部分参数。
如果您想将基本Home类扩展为子类,您最终将拥有相当数量的子类来覆盖所有参数组合,并且如果您需要更复杂的新参数,则会创建层次结构。
构造函数模式的建议是从对象自己的类中提取V 阿根廷消费者电子邮件列表 对象的构造代码并将其移动到单独的对象:构造函数。该模式将对象的构造组织为一组步骤。例如buildWalls()、buildWindows()等...
这样一系列的步骤就在一个构造函数对象中执行,而不是所有的步骤都需要被调用。
导演班
该模式还提出了一个名为director 的单独类,它定义了执行构造步骤的顺序。构造函数提供了这些步骤的实现。然而,director 类并不是绝对必要的。
什么时候使用Builder模式?
您可以使用构造函数模式来摆脱所谓的“伸缩构造函数”。具有太多可选参数的一种。 当您希望代码能够创建某些产品的不同表示形式时,可以使用此模式。您还可以使用构建器模式来构建复合树或其他复杂对象。
构造函数模式的优缺点
以下是这种模式的一些“优点和缺点”:
优点
缺点
您可以逐步构建对象、推迟构建步骤或递归执行步骤
创建多个产品表示时,您可以重复使用相同的构建代码
单一职责原则。 (可以将复杂的构建代码与产品的业务逻辑隔离)
增加了代码的整体复杂性,因为该模式需要创建几个新类
“显示代码”
为了让您对构造函数模式有一个具体的了解,您可以查看refactoring.guru 中的这个 PHP 示例。
在“现实世界”的示例中,您将看到生成 SQL 查询是 Builder 模式的最佳应用之一。
在示例中,您将看到构造函数接口定义了构造通用 SQL 查询所需的通用步骤,具体构造函数通过返回可在特定数据库引擎中执行的 SQL 查询部分来实现这些步骤。
您在项目中使用构建器模式吗?体验如何?下面评论一下吧!