我遇到了一些困难,无法确定在创建一个“部分”可变的对象时是否使用构造器是正确的方法,即该对象的某些属性是可变的。
让我们考虑一个
让我们考虑一个
IGlass
接口的实现。其中一个必填参数和一个可选参数,在对象创建后可以更改:public class SimpleGlass implements IGlass {
// Mandatory.
private final int size;
// Optional.
private boolean isEmpty;
private SimpleGlass(SimpleGlassBuilder builder) {
size = builder.getSize();
isEmpty = builder.isEmpty();
}
@Override
public int getSize() {
return size;
}
@Override
public boolean isEmpty() {
return isEmpty;
}
@Override
public void setEmpty(boolean isEmpty) {
this.isEmpty = isEmpty;
}
public static class SimpleGlassBuilder {
// Mandatory.
private final int size;
// Optional.
private boolean isEmpty = false;
public SimpleGlassBuilder(int size) {
this.size = size;
}
public SimpleGlassBuilder setEmpty(boolean isEmpty) {
this.isEmpty = isEmpty;
return this;
}
public IGlass build() {
return new SimpleGlass(this);
}
public int getSize() {
return size;
}
public boolean isEmpty() {
return isEmpty;
}
}
}
因此,建造者创建的是可变对象,但是在编程文献中提到建造者时,通常是指不可变对象。
在这种情况下使用建造者是否可行?