问题标签 [builder-pattern]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 改进验证检查的构建器模式?
我最近开始在我的一个项目中使用 Builder 模式,我正在尝试在我的 Builder 类上添加某种验证。我假设我们不能在编译时执行此操作,这就是我在运行时进行此验证的原因。但可能是我错了,这就是我想看看我是否可以在编译时做到这一点。
问题陈述:
在我上面的构建器模式中,我只有一个参数是必需的,其余参数是可选的,clientId
但我需要设置或设置。如果这三个都没有设置,那么我会抛出一条错误消息,如代码中所示。我在运行时做的那个检查。如果可能的话,我想在编译时做这个检查,除非提供了所有东西,否则不要构建我的模式?userid
flowid
deviceid
IllegalStateException
并不强制他们每次都通过所有这三个 id,他们可以通过所有三个或有时两个或有时只通过一个,但条件是应该设置其中一个。
如何改进构建器模式,以便仅在编译时进行 id 验证,而不是在运行时进行?
我发现了这个 SO链接,它完全谈论同一件事,但不确定如何在我的场景中使用它?还有这个带有扭曲的构建器模式和这个SO问题
谁能提供一个示例,我该如何在我的构建器模式中解决这个问题?
java - 如何强制使用所有参数的构建器模式?
我有一个构建器模式,其中很可能我的所有参数都是强制性的,因此我创建了一个长构造器,如下面的代码所示。
现在我很困惑,当所有参数都是强制性的,那么它有什么用呢?有没有更好的方法来表示我上面的 Builder 模式?可能在逻辑上将传递给它们自己的类的参数分组,以减少传递给构建器构造函数的参数数量?
虽然拥有单独的对象可以大大简化事情,但如果不熟悉代码,也会使事情变得有点难以理解。我可以做的一件事是将所有参数移动到它们自己的addParam(param)
方法中,然后build()
在运行时对方法中所需的参数执行验证?
我应该在这里遵循什么最佳实践,我可以在这里使用什么更好的方法?
java - 如何将我的构建器对象复制到另一个对象并修改其中的几个字段?
我有一个构建器类,如下所示:
我正在像这样制作我的构建器类:
现在我想制作一个keys
对象的副本并将其分配给新RequestKey
对象说它keysCopy
并仅将变量中的用户标识更改keysCopy
为其他用户标识12345L
。我怎样才能做到这一点?
在我的另一个类中,我可以访问该keys
对象,因此我想将其复制以制作keysCopy
对象,然后修改用户 ID 以包含12345L
在其中,有时我可能还需要FlowId
通过调用此设置器来进行设置setFlowId
。
java - 将属性传递给工厂方法
我有一个返回接口实现的工厂方法。问题是 - 实现具有不同的构造函数参数。
我的问题是 - 如何通过工厂方法将参数传递给接口的不同实现?
我有一个想法,但我不确定它是否有意义 - 将 Properties 对象传递给工厂方法?这样每个接口实现都可以获取其构造函数所需的属性,而工厂接口将统一。
这有意义吗,还是有更好的解决方案?
我决定添加一个示例,以便更好地阐明问题。
假设我们有接口SomeAlgorithm
并且我们有具体的算法,其中每个算法可能有不同的参数,例如
我希望能够做类似的事情
我处理不同参数的方法是
然后,如果算法完全有参数(例如 Algo1 没有参数),AlgoFactory 可以将适当的属性传递给具体的算法构造函数。如果某些属性不存在,则可以传递默认值(如果算法中需要该值)。
如您所见,我希望能够动态更改算法。用户将在运行时选择算法并传递适当的参数,这些参数将被放入属性对象中。
这有意义吗?
javascript - Builder Pattern 应该如何处理未定义的选项?
我正在用 JavaScript 构建一个构建器,但我不确定构建器通常如何处理选项的未定义值。如果字段未定义,我想认为 Builder 不会将可选字段附加到对象。Builder可以接受吗?如果没有,还有什么替代方案?
这是第一个实现的示例,其中构建器不附加未定义的可选项:
生成器:
在行动:
提前致谢!
java - 如何在方法的javadoc中显示变量的值?
我有一个 Builder 模式,其中我有一个静态类,如下所示:
现在我想在我的addCount
方法上添加一个 Javadoc,这样我就可以maxCount
在它上面显示值,而无需对实际数字进行硬编码。我尝试使用{@value Builder#maxCount}
,当我在该方法上查找 Javadoc 时它不显示值 3?我在这里做错了什么?
scala - 具有幻象类型的 Scala Builder 模式
在 Scala 中具有以下构建器模式。为了简化它,我使用了 3 个A
这样的实例,它们instance1
只包含or 并且与orfield1
没有任何联系。问题是在我必须使用的代码中的任何地方,调用都不是潜在安全的。例如会在. 为了保护它,我必须将 case 与选项匹配并处理 None 情况:field2
field3
val s = A.instance1.field1.get; doSomething(s)
get
A.instance1.field2.get
None.get
另一种解决方案是使用参数化类型,也称为幻像类型。我发现很少有关于该主题的好教程,并且在其中任何一个中都找不到如何在 Scala 中使用幻像类型和实际数据(或状态)实现类型安全的构建器模式——所有示例仅描述方法。
如何在我的示例中使用幻像类型来避免出现运行时None
异常并只获得不错的类型不匹配异常?我正在尝试参数化所有提到的类和方法并使用密封特征,但到目前为止没有成功。
java - Java减少构造函数的数量
假设我有一些具有构造函数的类,每个类都有 2 个参数,例如我有 5 种类型,其中两个可以作为第一个参数传递,三个作为第二个参数传递
假设类型是 A,B,C,D,E。基本上我有这样的事情:
因此,您可以看到这些类型的所有可能组合,并且没有可选参数,就像在标准构建器模式中一样。
我能做些什么来减少构造函数的数量?有什么模式可以帮助我吗?
编辑
我不能使用标准生成器,因为如果我提供了 A,那么我就不能提供 B,如果我提供了 C,那么我就不能提供 D 或 E
c++ - 带有 shared_ptr 和构建器模式的 C++ 运行时错误
我正在使用共享指针和构建器模式学习 C++ 语言。
我编写了以下不起作用的代码,但我不明白它为什么会发出运行时错误。
你能告诉我为什么它不能正常工作,我该如何解决这个问题才能正常工作?
提前感谢您的回答,并为我糟糕的英语感到抱歉。如果您不理解我的问题,请发表评论。