gpt4 book ai didi

java - Setters AND(不是 OR 或 VS)构建器模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:31:04 24 4
gpt4 key购买 nike

我有一种情况,我使用构建器模式来构建对象。最好的例子是披萨代码

public class Pizza {
private int size;
private boolean cheese;
private boolean pepperoni;
private boolean bacon;

public static class Builder {
//required
private final int size;

//optional
private boolean cheese = false;
private boolean pepperoni = false;
private boolean bacon = false;

public Builder(int size) {
this.size = size;
}

public Builder cheese(boolean value) {
cheese = value;
return this;
}

public Builder pepperoni(boolean value) {
pepperoni = value;
return this;
}

public Builder bacon(boolean value) {
bacon = value;
return this;
}

public Pizza build() {
return new Pizza(this);
}
}

private Pizza(Builder builder) {
size = builder.size;
cheese = builder.cheese;
pepperoni = builder.pepperoni;
bacon = builder.bacon;
}
}

到目前为止一切顺利。

现在假设一个用例,我需要更新 奶酪。这需要一个 setter。我从未见过一个构建器模式与 setter 模式共存的例子,这让我怀疑我所做的是反模式。

setter 和 builder 可以共存吗?

最佳答案

您从未见过它被使用,因为大多数时候,构建器模式用于构建不可变对象(immutable对象)。

但我不明白为什么它们不能共存。 builder 构建一个对象,你希望构建的对象是可变的,那么它可以有 setter。但是,如果它是可变的并且有 setter,为什么不使用简单的构造函数构建对象,并调用 setter 来改变状态呢?构建器不再真正有用,除非许多字段中只有一两个字段是可变的。

关于java - Setters AND(不是 OR 或 VS)构建器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22416239/

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