java - 复杂构建器模式场景 - java

标签 java builder

我有一个类(class)“MyClass”。 MyClass 的对象创建很复杂,因为它有 6 个步骤,其中一些步骤依赖于前面的步骤。对于这种情况,构建器模式是一个很好的用例吗?如果是,我该怎么做?请指教。

如果问题不清楚并且您需要更多输入,请回复。

代码(我已将示例代码中的步骤减少到 3 个,实际上我有 6 个步骤,其中一些步骤依赖于之前的步骤,总共有 40 行代码。所以我试图看看是否可以以更简洁的方式构建对象)。

public class MyClass{
private SomeObject3 obj3;
private SomeObject1 obj1;

public MyClass(ParamObject param)
{ 
    obj1 = new SomeObject1(param);
    SomeObject2 obj2 = new SomeObject2(obj1);
    obj3 = new SomeObject3(obj2);
}
}

最佳答案

构建器模式不一定是您所需要的,因为它无法强制执行“顺序”。

例如:

builder.setX(x)
       .setY(y)
       .setDepth(p);
builder.build();

应该相当于:

builder.setY(y)
       .setArea(p)
       .setX(x);
builder.build();

也就是说,您可以“隐藏”构建器中的步骤,例如,仅执行以下操作:

builder.setX(x)
       .setY(y)
builder.build();

并在 setX()setY() 的实现中检查两个参数是否都已设置,如果答案为"is",则调用私有(private)方法 setArea(x*y)。在此示例中,您必须在以下位置添加验证: 构建器.build(); 查看 x、y 和面积是否全部设置,如果没有设置,则引发 IllegalStateException。

关于java - 复杂构建器模式场景 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24588775/

相关文章:

ruby 生成器 : can't generate xml tags like <fu-ba:r>

java - 对象 ArrayList 中 contains(Object o) 的时间复杂度

JAVA 相当于 Javascript REGEX

java - android/java 概念用单个循环调用所有 getter 方法

java - 从SpringBoot获取protobuf消息对象列表

design-patterns - 构建器模式和模板方法之间的差异(构建器与模板)

java - 不可变对象(immutable对象)生成器

java - 如何在 PrePersist 注释中使用 JPARepository?

java - 如何将 @RequestBody 映射到实现 Builder 模式的 Java 对象

c# - 为什么有人说 "Builder Pattern"比使用 Fluent 接口(interface)的扩展方法更好?