我需要构建具有 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})
我需要构建具有 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})
您可以为此使用构建器。只有两个字段而不是三个字段的简短示例:
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);
}
}
您可以强制在 build() 方法中传递 A、B 或 C:
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) { }
}