「部分的に」変更可能なオブジェクト、つまりオブジェクトのプロパティの一部が可変であるオブジェクトを作成するときに、ビルダーを使用することが正しいアプローチであるかどうかを判断するのに苦労しています。
IGlass
このインターフェースの実装を考えてみましょう。オブジェクトの作成後に変更できる 1 つの最後の必須パラメータと 1 つのオプション パラメータ:
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;
}
}
}
そのため、ビルダーは可変オブジェクトを作成しますが、プログラミングの文献でビルダーが言及される場合は常に、それは不変オブジェクトに関するものです。
このような場合、ビルダーを使用しても大丈夫ですか?