java构建器模式和变化的字段

标签 java design-patterns builder

我很难弄清楚如何更改由构建器模式创建的对象中的某些字段: 例如,这是一个类

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;
  }
}

Pizza 对象是这样创建的:

Pizza pizza = new Pizza.Builder(12)
                       .cheese(true)
                       .pepperoni(true)
                       .bacon(true)
                       .build();

现在我想知道如何改变这个对象 例如奶酪场要假? 我没有 getter 和 setter,我知道我可以使用反射,但这会使代码更难阅读和理解。 那么构建器模式对于非最终对象有用吗?

最佳答案

构建器模式通常适合创建不可变对象(immutable对象),但它并不需要这样做。如果您希望能够在 build 之后更改值,则只需为此添加一个 setter 即可。

关于java构建器模式和变化的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51998929/

相关文章:

java - 第二次访问时为空数据

iOS swift : UITapGestureRecognizer and Storyboard

java - 带有 Java 8 Stream 的构建器模式

c# - 如何设计通用搜索条件?

sql-server - 选择/插入更新插入的版本 : is there a design pattern for high concurrency?

android - SIP 配置文件构建 :Android

javascript - 在 flex/flash builder 4.6 多平台移动应用程序中流式传输广播电台音频

java - 无法在 TFLite 张量之间复制 - 非法形状

java - 将 C 冒号驱动器替换为 c 美元

java - 将颜色添加到颜色数组