问题标签 [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 - 如何在我的 ModelInput 类中使用 Joshua Bloch 版本中描述的 Builder 模式?
我正在尝试为下面的类使用 Builder 模式。最初我使用类的构造函数来设置所有参数,但不小心遇到了 Builder 模式,它看起来很适合我的用例。
下面是我的课程,大多数人都会通过userId
,clientId
并且parameterMap
总是但其他字段是可选的,他们可能会通过也可能不会通过。而且,如果他们没有传递任何超时值,我需要始终将默认超时值设置为 500,但如果他们传递任何超时值,那么它应该覆盖我的默认超时值。这里的 Preference 是一个有四个字段的 ENUM。
下面是一个示例,我最初是如何ModelInput
通过将参数传递给构造函数来构造对象的。最初我传递了所有参数,但客户端大多会传递userId
,clientId
并且parameterMap
总是和其他字段是可选的..
如何转换上面的代码以开始使用 Bloch 在 Effective Java 中所说的 Builder 模式,它也是线程安全且不可变的?
以及如何使用 Builder 模式对此进行验证检查?人们可能会传递与客户端 ID 和超时相同的 userId 零或负数,也可能与 map 相同..
java - 如果未传递该值并且还使线程安全,如何在构建器模式中使用默认值?
我正在尝试为我的班级使用 Builder Pattern..
下面是我按照 Joshua Bloch 在 Effective Java, 2nd Edition 中展示的版本构建的 Builder 类。我们的客户通常会通过userId
,clientId
但其他字段是可选的,他们可能会通过也可能不会通过。这里的 Preference 是一个包含四个字段的 ENUM 类。
下面是我的枚举类 -
我正在拨打这样的电话来构造InputKeys
参数 -
我在这里看到的唯一问题是,如果客户没有传递任何超时值,我需要始终将默认超时值设置为 500,但如果他们传递任何超时值,那么它应该覆盖我的默认超时值。这对我不起作用,因为当我keys
在调试模式下看到我的时,它的超时值始终为 0。
有什么我想念的吗?而且我也试图使这个类不可变和线程安全。这是一个线程安全和不可变版本的 Builder 还是我错过了什么?
更新:-
人们将使用它的特定场景是我们有一个工厂,客户将使用它来调用我们的代码。我们有一个简单的接口,我们的一个类正在实现它,然后我们有一个工厂,我们将通过该工厂调用该实现的某个方法,该方法接受该keys
参数。
所以他们将在应用程序中使用下面的代码进行调用,并且他们可能会在多线程环境中运行应用程序。
然后 InputKeys Builder 可以多次使用来构造键,不是一次。无论他们将获得什么 userId 和 clientId,他们都将再次构造 InputKeys。
java - 如何检查 Builder 模式类中的无效输入?
下面是我的构建器类,其中两个字段是必需的,它们是userId
和clientId
。
现在我将像这样调用这个构建器类 -
但也有可能有人会传递错误的输入值,例如他们传递负的 userId 和负的 clientId、负的超时值或空的属性映射。如何在我的构建器类中处理这种情况?
如果我对 中的每个变量都有 IllegalArgumentcheck if else if block
,那么我的整个 Builder 类会被 IllegalArgumentException 检查淹没吗?
有没有更好的方法来做到这一点?
factory-method - 生成器与工厂方法模式
我正在阅读有关 Builder 模式的内容,并且像往常一样对 Factory 模式感到困惑。
我看过一篇很好的文章,它展示了抽象工厂模式和构建器模式之间的区别。
http://champika-nirosh.blogspot.in/2008/04/what-is-difference-between-abstract.html
但我的困惑是,除了类似于抽象工厂的 Builder 模式,我觉得它类似于工厂方法模式。不确定我的理解是否正确。但是在工厂方法中,我们也使用单独的工厂(具体工厂中的方法)来创建一个特定的对象(不是产品系列)。在那种情况下,Builder 与工厂方法模式有何不同。我知道 Builder 需要更多的步骤来创建对象,除此之外,我们需要使用一个而不是另一个的任何特定场景吗?请指导我。
谢谢。
c# - 如何制作接口列表以执行操作
我知道这个问题可以通过说来回答,foreach(var item in items){item.doSomething()};
但我所追求的略有不同。这里是界面。
可管理类 .cs
下面是我希望看到我的代码的样子
MainManagerClass.cs
我知道这里的这段代码不起作用,但似乎这在 C# 中应该是可行的。有人知道这是否可以做到吗?如果不是,这不像是世界末日,我只会foreach
在每种方法中做一个。
java - 如何从超类方法返回子类引用
我有一个返回自身的超类方法(对于构建器模式)。这个类有几个子类,所以我想返回一个对对象的实际(子类)类型的引用。像这样的东西:
这样我就可以从子类引用中调用其他子类方法而无需强制转换。像这样:
这是可能的吗?尝试做这样的事情是否有意义?
design-patterns - IntelliJ 中 Fluent-API Builder 的实时模板
如果我想在 IntelliJ 中生成“流利的构建器”,那么任何人都知道在哪里编辑“用构建器替换构造器”功能中使用的实时模板?
上面提到的功能将自动构建一个 Builder 模式对象,尽管使用通用的 setAttribute 命名约定,而不是我正在寻找的 .attribute 或 .withAttribute 的更流畅的命名模式。
最终,我希望能够更改用于呈现代码的设置/模板,类似于如何更改 IntelliJ 中各种其他自动生成代码的格式。
java - 使用构建器模式最多设置一次值
在使用构建器模式时,Java 中是否有标准做法,以确保成员变量最多设置一次。我需要确保 setter 被调用 0 或 1 次,但不会更多。我想抛出RuntimeException
某种类型的,但我担心同步问题以及该领域的最佳实践。
java - 使用反射的通用生成器模式类
用泛型实现构建器模式会很棒。理论上,可以使用反射来实现以下目标:
我已经编写了以下代码:
如何实现?
java - 客户端库的 Builder 模式的 Guice 注入
我是 Google Guice 的新手,我正在努力思考如何在我的特定场景中使用它。我正在构建一个非常复杂的服务客户端,并且(我相信)确实需要正确实例化构建器模式。因为这个客户端最终会被打包到它自己的 JAR 库中,所以我希望 Guice 在后台处理 DI。下面是我的代码的一个大大简化的版本:
如您所见,层次/深度图如下:
MyClient
应该注入*ResourceImpl
s- 每个都
*ResourceImpl
应该注入一个*Command
实例
预期的用例是使构建MyClient
impl 变得简单:
所以这是我最好的尝试MyClientImpl
,它的内部构建器和我的 Guice 模块:
但是对于我的生活,我看不到如何/在哪里:
- 将 s绑定
*Command
到*ResourceImpl
s;和 *ResourceImpl
将s绑定到MyClientImpl
实例
有任何想法吗?