使用Builder Pattern时,为什么不应该重用builder-object来访问对象配置?

时间:2016-09-07 15:12:55

标签: java design-patterns builder delegation builder-pattern

使用Builder Pattern时为什么不应该重用builder-object来访问对象配置? 例如:

正常方式:

ObjectA(ObjectBuilder b) {
    this.a = b.getA();
}
public Object getA(){
    return this.a;
}

但为什么我不能只使用它:

ObjectA(ObjectBuilder b) {
    this.builder = b;
}
public Object getA(){
    return this.builder.getA();
}

谢谢:)

1 个答案:

答案 0 :(得分:7)

使用构建器的一个重要原因是构建一个不可变对象:构建器是可变的,它构建的东西不是(必然)。

如果您委托给构建器,则您的实例将再次发生变化:任何引用同一ObjectBuilder实例的人都可以更改您的ObjectA。这意味着您在施工时对ObjectA状态的有效性所做的任何检查都可能无效。

如果您想要一个可变对象,则不需要构建器:只需在ObjectA上设置setter。