Я играл вокруг с шаблоном Builder и застревают, как добавить новое «свойство» на новый созданный объект:Создать новый объект Builder шаблон со ссылкой «старый» объект
public class MsProjectTaskData {
private boolean isAlreadyTransfered;
private String req;
public static class Builder {
private boolean isAlreadyTransfered = false;
public Builder withTransfered(boolean val) {
isAlreadyTransfered = val;
return this;
}
public MsProjectTaskData build() {
return new MsProjectTaskData(this);
}
}
private MsProjectTaskData(Builder builder) {
isAlreadyTransfered = builder.isAlreadyTransfered;
}
public MsProjectTaskData(String req) {
this.req = req;
}
}
я могу создать новый объект Builder, как это:
MsProjectTaskData data = new MsProjectTaskData.Builder().withTransfered(true).build();
Но при таком подходе req
строка из нового созданного объекта теряется (конечно).
Есть ли возможность создать новый объект с новым набором isAlreadyTransfered
переменной и со «старой» строкой req
из «старого» объекта?
Возможно, мне нужно передать старую ссылку на объект Builder, но я не знаю, как это сделать. Может быть, использование шаблона Builder не очень полезно для этого подхода?
EDIT: (После того, как комментарий от Eugene)
Думай, я получил его:
public static class Builder {
private boolean isAlreadyTransfered = false;
private MsProjectTaskData data;
public Builder(MsProjectTaskData data) {
this.data = data;
}
public Builder withTransfered(boolean val) {
isAlreadyTransfered = val;
data.setAlreadyTransfered(isAlreadyTransfered);
return this;
}
public MsProjectTaskData build() {
return data;
}
}
Кажется, работает или что-то не так с кодом выше? Могу ли я использовать этот подход без рассмотрения?
В какой «старой» ссылке на объект вы говорите? Добавьте параметр в метод 'build()'. Это в конечном итоге имеет тот же эффект, что и конструктор копирования. –
Старый объект ссылки означает «старый» объект MsProjectTaskData. Я хочу клонировать этот объект с новым значением, которое устанавливается в методеTransfered (true). – sk2212
В этом специальном случае простую функцию setTransfered() выполнила бы задание. Если ваша цель - познакомиться с шаблоном-строителем и его реализацией, я думаю, вам придется пойти и найти лучший пример. То, что вы здесь делаете, больше похоже на прототипирование для меня. – Fildor