gpt4 book ai didi

java - 更简洁的 Builder 模式?

转载 作者:搜寻专家 更新时间:2023-10-31 20:11:03 25 4
gpt4 key购买 nike

当我回顾 Josh 的 Bloch 书中的 Builder 模式 时,我想出了一个更简单的实现,但我不确定它是否合适。例如:

public class Test {
public static void main(String[] args) {
Numbers first = new Numbers.Builder().setD(3.14).build();
System.out.println(first);
Numbers second = new Numbers.Builder().setI(17).setF(1.24F).build();
System.out.println(second);
System.out.println(first);
}
}

final class Numbers {
private int i;
private long l;
private float f;
private double d;

private Numbers() {}


public static class Builder {
private final Numbers instance = new Numbers();

public Builder setI(int i) {
instance.i = i;
return this;
}

public Builder setL(long l) {
instance.l = l;
return this;
}

public Builder setF(float f) {
instance.f = f;
return this;
}

public Builder setD(double d) {
instance.d = d;
return this;
}

public Numbers build() {
return instance;
}
}

@Override
public String toString() {
return String.format("%4d %4d %7.3f %7.3f", i, l, f, d);
}
}

它仍然可以被视为构建器模式还是我错过了什么?

编辑

这个呢?

//...

private Numbers() {}


private Numbers(Numbers o) {
i = o.i;
l = o.l;
f = o.f;
d = o.d;
}

public static class Builder {
private final Numbers instance = new Numbers();

//...

public Numbers build() {
return new Numbers(instance);
}
}

最佳答案

您的代码的问题是,如果您为同一个 Builder 实例调用 build 两次,您将获得相同的 Numbers 实例.如果在调用 build 并获得 Numbers 实例后调用 Builder 的方法,您将更改该实例。构建器创建的实例在构建后应该独立于构建器。

关于java - 更简洁的 Builder 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28332109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com