最近,我在面试中被要求实现Builder模式,以便用户在设置参数B之前无法设置参数A。
我建议在构建Builder时将A作为必需参数传递,但他对我的答案不满意。 我还建议在设置B时,如果未设置A,则抛出IllegelStateException,但他再次表示不满意。 有人能否建议如何强制用户在设置B之前先设置A?
class Example{
private int A;
private int B;
public static class Builder{
}
}
最近,我在面试中被要求实现Builder模式,以便用户在设置参数B之前无法设置参数A。
我建议在构建Builder时将A作为必需参数传递,但他对我的答案不满意。 我还建议在设置B时,如果未设置A,则抛出IllegelStateException,但他再次表示不满意。 有人能否建议如何强制用户在设置B之前先设置A?
class Example{
private int A;
private int B;
public static class Builder{
}
}
主要思路是在setA
和setB
方法中使用不同的返回类型,但这些类型必须是构建器类型的相同类型或子类型。
public class ExampleBuilderImpl implements FullExampleBuilder {
private int a;
private int b;
public Example createExample() {
return new Example(a, b);
}
@Override
public PartExampleBuilder setB(int b) {
this.b = b;
return this;
}
@Override
public FullExampleBuilder setA(int a) {
this.a = a;
return this;
}
public static void main(String[] args) {
ExampleBuilderImpl builder = new ExampleBuilderImpl();
// compiler error
// builder.setB(1).setA();
builder.setA(1).setB(2);
}
}
public interface FullExampleBuilder extends PartExampleBuilder {
FullExampleBuilder setA(int a);
}
public interface PartExampleBuilder {
PartExampleBuilder setB(int b);
}