0

我需要构建具有 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})

4

2 回答 2

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);
    }
}
于 2013-06-09T12:51:03.447 回答
1

您可以强制在 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) { }
}
于 2013-06-09T12:52:08.643 回答