Почему при использовании шаблона построителя я не должен повторно использовать объект построителя для доступа к конфигурации объекта?

почему при использовании шаблона построителя я не должен повторно использовать объект построителя для доступа к конфигурации объекта? Например:

Обычный способ:

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();
}

Спасибо :)


person A.Non    schedule 07.09.2016    source источник
comment
Весь смысл использования построителя заключается в создании неизменяемых объектов: построитель изменяем, а то, что он создает, — нет. Если вы делегируете компоновщику, ваш экземпляр снова становится изменяемым: любой, у кого есть ссылка на тот же экземпляр ObjectBuilder, может изменить ваш ObjectA. Если вам нужен изменяемый объект, вам не нужен конструктор: просто установите сеттеры в вашем ObjectA.   -  person Andy Turner    schedule 07.09.2016
comment
Это довольно хороший ответ. Это правда, я не хочу, чтобы A менялся после конструктора. Вот почему я использовал конструктор в первую очередь.   -  person A.Non    schedule 07.09.2016


Ответы (1)


Основная причина использования построителя — создание неизменяемого объекта: построитель изменяем, а то, что он создает, — нет (обязательно).

Если вы делегируете компоновщику, ваш экземпляр снова станет изменяемым: любой, у кого есть ссылка на тот же экземпляр ObjectBuilder, может изменить ваш ObjectA. Это означает, что любые проверки, которые вы выполняете на предмет достоверности состояния ObjectA во время строительства, могут быть признаны недействительными.

Если вам нужен изменяемый объект, вам не нужен конструктор: просто установите сеттеры в вашем ObjectA.

person Andy Turner    schedule 07.09.2016
comment
Если вам нужен изменяемый объект, в построителе меньше необходимости. Строители хороши не только для неизменности. - person jaco0646; 07.09.2016
comment
@AndyTurner У меня есть аналогичный вопрос по шаблону Builder здесь . Хотел узнать, не могли бы вы помочь мне там. - person ; 20.12.2016