用于构建任何一个字段必须设置的对象的Java模式?

时间:2013-06-09 12:45:15

标签: java class design-patterns builder builder-pattern

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

2 个答案:

答案 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) { }
}