问题标签 [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.

0 投票
1 回答
979 浏览

java - 改进验证检查的构建器模式?

我最近开始在我的一个项目中使用 Builder 模式,我正在尝试在我的 Builder 类上添加某种验证。我假设我们不能在编译时执行此操作,这就是我在运行时进行此验证的原因。但可能是我错了,这就是我想看看我是否可以在编译时做到这一点。

问题陈述:

在我上面的构建器模式中,我只有一个参数是必需的,其余参数是可选的,clientId但我需要设置或设置。如果这三个都没有设置,那么我会抛出一条错误消息,如代码中所示。我在运行时做的那个检查。如果可能的话,我想在编译时做这个检查,除非提供了所有东西,否则不要构建我的模式?useridflowiddeviceidIllegalStateException

并不强制他们每次都通过所有这三个 id,他们可以通过所有三个或有时两个或有时只通过一个,但条件是应该设置其中一个。

如何改进构建器模式,以便仅在编译时进行 id 验证,而不是在运行时进行?

我发现了这个 SO链接,它完全谈论同一件事,但不确定如何在我的场景中使用它?还有这个带有扭曲的构建器模式和这个SO问题

谁能提供一个示例,我该如何在我的构建器模式中解决这个问题?

0 投票
2 回答
7123 浏览

java - 如何强制使用所有参数的构建器模式?

我有一个构建器模式,其中很可能我的所有参数都是强制性的,因此我创建了一个长构造器,如下面的代码所示。

现在我很困惑,当所有参数都是强制性的,那么它有什么用呢?有没有更好的方法来表示我上面的 Builder 模式?可能在逻辑上将传递给它们自己的类的参数分组,以减少传递给构建器构造函数的参数数量?

虽然拥有单独的对象可以大大简化事情,但如果不熟悉代码,也会使事情变得有点难以理解。我可以做的一件事是将所有参数移动到它们自己的addParam(param)方法中,然后build()在运行时对方法中所需的参数执行验证?

我应该在这里遵循什么最佳实践,我可以在这里使用什么更好的方法?

0 投票
1 回答
1466 浏览

java - 如何将我的构建器对象复制到另一个对象并修改其中的几个字段?

我有一个构建器类,如下所示:

我正在像这样制作我的构建器类:

现在我想制作一个keys对象的副本并将其分配给新RequestKey对象说它keysCopy将变量中的用户标识更改keysCopy为其他用户标识12345L。我怎样才能做到这一点?

在我的另一个类中,我可以访问该keys对象,因此我想将其复制以制作keysCopy对象,然后修改用户 ID 以包含12345L在其中,有时我可能还需要FlowId通过调用此设置器来进行设置setFlowId

0 投票
4 回答
2196 浏览

java - 将属性传递给工厂方法

我有一个返回接口实现的工厂方法。问题是 - 实现具有不同的构造函数参数。

我的问题是 - 如何通过工厂方法将参数传递给接口的不同实现?

我有一个想法,但我不确定它是否有意义 - 将 Properties 对象传递给工厂方法?这样每个接口实现都可以获取其构造函数所需的属性,而工厂接口将统一。

这有意义吗,还是有更好的解决方案?

我决定添加一个示例,以便更好地阐明问题。

假设我们有接口SomeAlgorithm并且我们有具体的算法,其中每个算法可能有不同的参数,例如

我希望能够做类似的事情

我处理不同参数的方法是

然后,如果算法完全有参数(例如 Algo1 没有参数),AlgoFactory 可以将适当的属性传递给具体的算法构造函数。如果某些属性不存在,则可以传递默认值(如果算法中需要该值)。

如您所见,我希望能够动态更改算法。用户将在运行时选择算法并传递适当的参数,这些参数将被放入属性对象中。

这有意义吗?

0 投票
1 回答
204 浏览

javascript - Builder Pattern 应该如何处理未定义的选项?

我正在用 JavaScript 构建一个构建器,但我不确定构建器通常如何处理选项的未定义值。如果字段未定义,我想认为 Builder 不会将可选字段附加到对象。Builder可以接受吗?如果没有,还有什么替代方案?

这是第一个实现的示例,其中构建器不附加未定义的可选项:

生成器:

在行动:

提前致谢!

0 投票
2 回答
5436 浏览

java - 如何在方法的javadoc中显示变量的值?

我有一个 Builder 模式,其中我有一个静态类,如下所示:

现在我想在我的addCount方法上添加一个 Javadoc,这样我就可以maxCount在它上面显示值,而无需对实际数字进行硬编码。我尝试使用{@value Builder#maxCount},当我在该方法上查找 Javadoc 时它不显示值 3?我在这里做错了什么?

0 投票
2 回答
80 浏览

java - 是否有一种设计模式可以创建只有一些值不同的原型?

类层次结构
客户端通过基类(java代码)使用它们:

createNewConcreteFeature只会从地图中获取 requiredFeature 值并返回一个实例。这似乎是一种在派生类中是静态的方法,但是客户端无法使用现有对象创建派生类实例。有没有更优雅的写法?或者这有一些适用的模式吗?

0 投票
2 回答
924 浏览

scala - 具有幻象类型的 Scala Builder 模式

在 Scala 中具有以下构建器模式。为了简化它,我使用了 3 个A这样的实例,它们instance1只包含or 并且与orfield1没有任何联系。问题是在我必须使用的代码中的任何地方,调用都不是潜在安全的。例如会在. 为了保护它,我必须将 case 与选项匹配并处理 None 情况:field2field3val s = A.instance1.field1.get; doSomething(s)getA.instance1.field2.getNone.get

另一种解决方案是使用参数化类型,也称为幻像类型。我发现很少有关于该主题的好教程,并且在其中任何一个中都找不到如何在 Scala 中使用幻像类型和实际数据(或状态)实现类型安全的构建器模式——所有示例仅描述方法。

如何在我的示例中使用幻像类型来避免出现运行时None异常并只获得不错的类型不匹配异常?我正在尝试参数化所有提到的类和方法并使用密封特征,但到目前为止没有成功。

0 投票
3 回答
229 浏览

java - Java减少构造函数的数量

假设我有一些具有构造函数的类,每个类都有 2 个参数,例如我有 5 种类型,其中两个可以作为第一个参数传递,三个作为第二个参数传递

假设类型是 A,B,C,D,E。基本上我有这样的事情:

因此,您可以看到这些类型的所有可能组合,并且没有可选参数,就像在标准构建器模式中一样。

我能做些什么来减少构造函数的数量?有什么模式可以帮助我吗?

编辑

我不能使用标准生成器,因为如果我提供了 A,那么我就不能提供 B,如果我提供了 C,那么我就不能提供 D 或 E

0 投票
1 回答
745 浏览

c++ - 带有 shared_ptr 和构建器模式的 C++ 运行时错误

我正在使用共享指针和构建器模式学习 C++ 语言。

我编写了以下不起作用的代码,但我不明白它为什么会发出运行时错误。

你能告诉我为什么它不能正常工作,我该如何解决这个问题才能正常工作?

提前感谢您的回答,并为我糟糕的英语感到抱歉。如果您不理解我的问题,请发表评论。