- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习设计模式。作为其中的一部分,我将介绍 Builder 设计模式。该定义说“构建器设计模式的目的是将复杂对象的构造与其表示分开”。我试图理解“复杂对象”是什么意思。当我在网上查看时,人们提到构造函数是否有更多参数或
可选参数然后使用构建器对象。
这个解释正确吗?如果我们有可选参数,那么为什么不从构造函数中删除这些参数,如果客户端需要可以使用 set 方法设置该参数?
如果我们有更多的构造函数参数并尝试使用构建器类创建对象,那么客户端可能没有设置一些参数并调用 final方法来获取对象。
最佳答案
以 Pizza
的经典示例为例.
在一些餐厅,比萨饼有不同的变化。
一个配西红柿和金枪鱼,另一个配西红柿、金枪鱼和奶酪,另一个配西红柿、金枪鱼、奶酪和中间的一个鸡蛋。
这是一个 复杂对象 从某种意义上说,它可能允许大量领域/成分的组合。
所以对于同一个对象,这里是披萨,有几种可能的表示(变化)。
如果没有构造此对象的实用方法,您将处理许多处理每个变体的可能构造函数,这在 Pizza
中真是一团糟。类(class)。
你唤起了通过使用一些 setter 来摆脱这些构造函数的事实。
但是在一个好的 OO 设计中,您希望通过一个构造函数或……另一种流畅的方式立即获得一个完整对象的实例,该方法由……构建器模式组成,以避免在完成添加所需成分之前创建不幸的部分 Pizza .
此外,setter 可能会破坏一些应该由对象本身保护的不变量。
事实上,如果代码客户端创建了一个“海王星披萨”而忘记添加像金枪鱼这样的主要成分,它就不再是(有效的)披萨了。
简单的 setter 为任何客户端提供了“操作能力”,这不应该得到它。
而 builder 对象还负责验证必填字段,同时允许省略可选字段。
构建器模式旨在通过流畅的 API 来避免那些“无限”添加构造函数来表示每个比萨饼,该 API 允许比萨饼成分的简单、增量和有凝聚力的组合,然后将一致且完整的对象返回给客户端。
关于design-patterns - 构建器模式是否与构造函数中的参数数量有关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61983851/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!