让我们假设一个Foo具有2个实例变量的类,int x和int y.用例要求我可以使用none,single或all params来构造类.
input X input Y
0 0 no constuctor
0 1 public Foo(int x);
1 0 public Foo(int y);
1 1 public Foo(int x, int y);
Run Code Online (Sandbox Code Playgroud)
现在讨论这种情况下的惯例/最佳做法.我是否需要添加构造函数的所有排列?如果是,它将导致指数增长.如果否,那么最新解决方案是什么?
您最好的选择是使用构建器模式
new FooBuilder().build() // Uses default values for both parameters
new FooBuilder().setX(42).build() // Uses default value for y
new FooBuilder().setY(-13).build() // Uses default value for x
new FooBuilder().setX(42).setY(-13).build() // Supplied values for both
Run Code Online (Sandbox Code Playgroud)
然后你的建设者可能看起来像
class FooBuilder {
public Foo build() { return new Foo(...); }
public FooBuilder setX(int x) { ...; return this; }
public FooBuilder setY(int y) { ...; return this; }
}
Run Code Online (Sandbox Code Playgroud)