我用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