我用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;
}
}
我可以創建生成一個新的對象是這樣的:
MsProjectTaskData data = new MsProjectTaskData.Builder().withTransfered(true).build();
但這種方法從一個新創建的對象的字符串req
丟失(當然)。
是否有可能用新的集合isAlreadyTransfered
變量創建一個新對象,與來自「舊」對象的「舊」req
字符串?
也許我必須將舊的對象引用傳遞給Builder,但我不知道該怎麼做。也許使用Builder模式對於這種方法並不真正有用?
編輯:
思(尤金評論)之後,我知道了:
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()'方法中添加一個參數。這最終與複製構造函數具有相同的效果。 – 2013-04-25 13:57:25
舊對象引用表示MsProjectTaskData的「舊」對象。我想用在withTransfered(true)方法中設置的新值來克隆這個對象。 – sk2212 2013-04-25 14:00:08
在這種特殊情況下,一個簡單的setTransfered()可以完成這項工作。如果你的目標是熟悉builder模式及其實現,我想你必須去找一個更好的例子。你在這裏做什麼看起來更像是原型。 – Fildor 2013-04-25 14:00:43