问题标签 [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 投票
2 回答
300 浏览

java - 我的构建器模式有什么问题?

我在实现 Builder 模式时遇到问题。我有 2 节课:

问题是当我试图从我的客户端代码调用生成器时:

我遇到了编译器问题:

错误:(24, 30) java: 不兼容的类型: course_2.Student.Builder 无法转换为 course_2.Student

有人可以帮助我理解,为什么会发生这种情况以及我该如何解决?谢谢!

0 投票
1 回答
686 浏览

groovy - 具有反应式编程的构建器模式

我正在尝试使用响应式编程(RxGroovy)使用构建器模式创建对象,其中属性值来自数据库查询。我首先在寻找如何去做,其次是思考这是否是一个好主意。

我试图创建的对象属于这种类型:

和建设者:

我有两个查询,一个返回所有 Foo 对象的名称,然后是一个单独的查询,我为每个 Foo 对象运行一次以获取所有相关的 ID。

我已经有一个方法(调用它queryAsObservable)来进行查询并获得一个发出结果集每一行的 Observable。所以设置name看起来像这样:

给定 a FooBuilder,我可以像这样设置relatedIds:

我的问题是如何将两者联系在一起?如何创建 observable 来为FooBuilder第一个 observable 发出的每个设置相关 ID,如图所示?最后,我只需要获取所有FooBuilder对象,并设置好namerelatedIds属性。

关于 JOIN 的注意事项

我知道我可以通过 JOIN 在一个查询中获取相关的 ID 和名称。我的想法是,我可以使用大量并行运行的较小查询,并在结果可用时使用 Observable 流为每个结果完成工作,而不是等待所有结果进入然后依次构建对象。我对为什么这是一个好主意或坏主意持开放态度。

0 投票
1 回答
17294 浏览

java - 我应该在 DTO 中使用构建器模式吗?

这可能是一个非常主观的问题,但我想知道更多的意见。我用 Spring MVC 构建了一个 Rest API 服务,并实现了 DTO-Domain-Entity 模式。我想知道您对在 DTO 中实现Builder 模式有何看法,例如

根据定义:

Builder 设计模式的目的是将复杂对象的构造与其表示分离。通过这样做,相同的构造过程可以创建不同的表示。

在我的大多数 DTO 案例中(并不是说全部),我没有更复杂的对象来构建,例如这种情况。而且,老实说,如果我们谈论 DTO,我想不出任何构造复杂对象的例子。

有助于使不可变对象更易于使用并增加代码清晰度的模式之一是 Builder 模式。

构建器模式提供对象不变性。然后,我们可以认为 DTO 是服务响应本身,不应更改,因为这是一个响应(至少我是这么想的)


所以你怎么看?我应该对 DTO 使用这种模式吗(鉴于这种情况,可能是大多数情况,不满足复杂对象原则)?

0 投票
3 回答
1694 浏览

oop - 铁路票价计算可以使用哪种设计模式?

我正在开发一种类似于铁路票务的解决方案。

背景:给出了来自泰米尔纳德邦的 18 个火车站。乘客需要一张票。对于最多 5 个车站的旅程,票价为 10 卢比。5站后,每5站,将收取5卢比的额外费用。对于完整的旅程,即从第一站到最后一站,票价为卢比。20.

例如

未来,可以添加更多关于票价计算的业务规则。

问题是,在票价计算中哪些设计模式是正确的选择?

0 投票
4 回答
7929 浏览

java - Builder 模式对 Setter 方法有用吗?

所以我有一个带有 Hybris、Spring 等的网络项目。

我有一些类是自动生成的。假设我有一个模型类,它是自动生成的,并且从另一个类继承了一些方法来设置字段。

在编写单元测试时,开始使用 Builder 模式有用吗?因为问题是,我没有构造函数,比如 Employee(int id, String name) 等等,我只有继承的方法来设置它们(setId(int id) 等等)。

因此,例如,当我为此模型编写 Builder 类时,我将拥有方法 .withId(int id) 和 .withName(String name) 以及 build() 方法,我将在其中运行 setter 方法。

所以最后在我的测试课上我会有:

但是因为我已经有了 Setter-Methods 我通常有:

那么在这种情况下真的值得付出努力吗?或者有什么我没有真正理解的东西?

谢谢!

0 投票
1 回答
812 浏览

java - 构建器模式多个可变参数

我正在阅读 Joshua Bloch 的“Effective Java”,在第 2 项中,他提到了在处理构造函数中的多个参数时使用 Builder 模式的优点。一切都很好,直到我看到传统构造函数和这种模式之间的多个 var-args 差异。所以,我对此有一些疑问:

  1. 构建器模式如何允许多个 var-args?
  2. 为什么传统的构造函数只允许一个 var-arg?(也许是因为如果有多个 var-args,当两者定义的数据类型相同时,它会导致歧义,但我不确定这是它背后的正确原因。)

虽然我没有在我的代码中使用 var-args,但是是的,我知道它们的用途。我仍然无法理解上述陈述背后的原因。任何帮助,将不胜感激。

0 投票
1 回答
522 浏览

javascript - 使用私有变量的 Javascript 构建器模式

我正在尝试在 Javascript 中创建一个使用私有变量的构建器模式,同时提供一个fullName返回所有其他属性的混搭的公共访问器 ()。这个问题和答案表明我可以Object.defineProperty在 person 构造函数中使用来访问私有变量,但它不起作用 -instance.fullName总是undefined.

我怎样才能让它工作,以便构建器模式变量保持私有,但公共访问器可以在整个构建链中访问它们?

0 投票
1 回答
2303 浏览

android - 我可以使用构建器模式制作抽象片段类吗?

我让一些片段扩展了 topFragment 类。但它有可变参数 - 自定义侦听器、一些模型等。

这是第二个片段类

TopFragment fragment = new SecondFragment(); 有用。那么如何用builder创建继承片段类的实例呢?

0 投票
1 回答
3582 浏览

java - Unable to mock while implementing builder pattern

I'm having hard time to test a class(TestClass) which uses builder pattern(BuilderClass) in logic . I'm unable to mock builder class(BuilderClass). The following is simplified version of my logic.

And here is my builder class

For my test class, I'm using Mockito with Dataprovider.

Help me if I miss anything. Thanks }

0 投票
1 回答
1721 浏览

java - 通过在编译时进行验证来改进构建器模式

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

传统建造者模式

问题陈述:

如您所见,我有各种参数,但只有一个参数clientId是必需的,其余参数是可选的。userid在我上面的代码中,我需要设置flowiddeviceid设置。如果这三个都没有设置,那么我将抛出IllegalStateException一条错误消息,如代码中所示。如果设置了所有三个或两个,那很好,我正在对这三个或两个做一些优先逻辑来决定使用哪一个,但至少必须设置其中一个。

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

我正在寻找的是 - 除了在运行时做所有这些事情之外,我可以在编译时执行此操作并且不构建我的构建器模式,除非这三个设置中的任何一个并且在编译时它应该告诉丢失了什么?

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