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();
}