Java中构造函数中的多个可选参数 - 构造函数的指数

Cha*_*guy 2 java constructor design-patterns

这是我遇到过几次,但还没有找到令人满意的答案.这看起来很愚蠢,但谷歌搜索了一段时间后,我无法想出一些好的东西.

假设我有一个包含20个实例变量的类,每个变量都是可选的(将被初始化或不被初始化).

现在我希望我的构造函数处理所有的情况,如果有一些实例变量它很好我可以创建具有不同签名的构造函数,但是这里我有20个,所以我需要2 ^ 20 = 1,048,576个构造函数处理所有案件!那似乎......不是最优,你不同意吗?

所以,由于采用这种强力方法,我基本上必须构造2 ^ n个构造函数,其中n是实例变量的数量,我想找到更好的方法来实现它.

我已经看到了这个问题的几个解决方案,但我相信它们都是关于数据的假设,但在我的情况下,这些变量中的每一个都可以初始化或不是随机的,我在初始化之前无法知道.

我正在寻找一些我可以应用的设计模式或想法,以使我的代码更加可维护(不用担心我没有创建1M +构造函数:)

谢谢.

emo*_*ory 5

将Bean模式与Builder结合使用.YourObject在构造过程中不会有不一致的状态,但它仍然需要20多个set操作,你可以使YourObject不可变(如果你想) - 但不是YourObjectBuilder.

public class YourObject {
    private Type field1;
    private Type field2;
    private Type field3;
    ...
    YourObject ( Type field1 , Type field2 , Type field3 ... ) { }
}

public class YourObjectBuilder {
    private Type field1;
    private Type field2;
    private Type field3;
    ...

    public YourObjectBuilder() {
    }

    public YourObject make ( ) {
         return new YourObject ( field1 , field2 , field3 ... ) ;
    }

    public void setField1(Type t) {
        field1 = t;
    }

   public void setField2(Type t) {
        field2 = t;
   }

    public void setField3(Type t) {
        field3 = t;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)