Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Step Builder模式创建包含列表实例变量的复杂对象_Java_Design Patterns_Builder - Fatal编程技术网

Java 使用Step Builder模式创建包含列表实例变量的复杂对象

Java 使用Step Builder模式创建包含列表实例变量的复杂对象,java,design-patterns,builder,Java,Design Patterns,Builder,假设我要构造以下对象的实例: private class ComplexObject { private int param1; // Required Parameter private int param2; // Required Parameter private int param3; // Required Parameter private List<Integer> listParam4; // This list should con

假设我要构造以下对象的实例:

private class ComplexObject {
    private int param1; // Required Parameter
    private int param2; // Required Parameter
    private int param3; // Required Parameter
    private List<Integer> listParam4; // This list should contain atleast one Integer

    private ComplexObject() {
        this.listParam4 = new ArrayList<Integer>();
    }
}

AddToParam4ListStep
应该简单地拥有一个
add()
方法,返回另一个接口(
AddToParam4ListOrBuild
),该接口允许
add()
更多参数(返回自身)并生成最终对象:

public interface AddToParam4ListStep {
    AddToParam4ListOrBuild add(Integer toAdd);
}

public interface AddToParam4ListOrBuild {
    AddToParam4ListOrBuild add(Integer toAdd);
    ComplexObject build();
}

构建器模式的全部要点是允许您以所需的顺序设置任何字段。这种说法有点不中肯。此外,您似乎希望在编译时检查是否设置了所需的属性。你不能在运行时抛出一个异常吗?你到底为什么需要这些接口?设计模式旨在以一种易于实现/读取/维护的方式解决经常出现的问题,创建所有这些接口有点违背目的,并且不增加任何传统价值。AddToParam4ListStep应该只使用一个add()方法返回另一个接口(AddToParam4ListOrBuild),该接口允许add()更多参数(返回自身)并生成最终对象。@Sweeper它是步骤生成器,而不是生成器,接口是实现生成顺序所必需的。检查这个,这个例子看起来像你的案例:)@JBNizet非常感谢你的评论!它解决了我的疑问。如果可能的话,请你把它作为一个答案贴出来,这样我就可以接受了。谢谢你的回答!我还认为,
AddToParam4ListOrBuild
接口可以从
AddToParam4List
扩展,以避免再次声明相同的方法。
public interface AddToParam4ListStep {
    AddToParam4ListOrBuild add(Integer toAdd);
}

public interface AddToParam4ListOrBuild {
    AddToParam4ListOrBuild add(Integer toAdd);
    ComplexObject build();
}