我需要构建一个具有3个字段的类的对象:A,B和C.有效对象至少有一个由用户设置的A,B或C.我查看了Builder Pattern,它接近我想要的,但只有1个字段是强制性的。我想要1个字段,必须设置为我拥有的3个字段中的任何一个。有什么建议吗?
我的替代方案是使用7个构造函数(对于{A},{B},{C},{A,B},{B,C},{A,C},{A,B,C})
答案 0 :(得分:3)
您可以使用构建器。只有两个字段而不是三个字段的简短示例:
public final class MyBuilder
{
private X a, b;
public MyBuilder withA(X a)
{
b = null;
this.a = a;
return this;
}
public MyBuilder withB(X b)
{
a = null;
this.b = b;
return this;
}
public MyClass build()
{
if (a == null && b == null)
barf(); // <-- throw exception here
// A and B inherit MyClass
return a != null ? new A(a) : new B(b);
}
}
答案 1 :(得分:1)
您可以强制A,B或C在build()方法中传递:
class ValidBuilder {
public ValidBuilder withA(Object a) {}
public ValidBuilder withB(Object b) {}
public ValidBuilder withC(Object c) {}
public ValidObject buildA(Object a) { }
public ValidObject buildB(Object b) { }
public ValidObject buildC(Object c) { }
}