有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我们需要一个。生成器模式中的build()方法?

我有一个关于“有效Java”中的“构建器模式”的问题。我们需要一个.build()方法让它正确地实现模式吗?例如,假设我们有以下类:

public class CoffeeDrink {

    private int numEspressoShots;
    private short milkType;
    private boolean withWhip;

    private CoffeeDrink() {
    }

    public static CoffeeDrink buildNewDrink() {
        return new CoffeeDrink();
    }

    public CoffeeDrink withEspresso(int n) {
        this.numEspressoShots = n;
        return this;
    }

    public CoffeeDrink withMilkType(shot t) {
        this.milkType = t;
        return this;
    }

    public CoffeeDrink withWhip() {
        this.withWhip = true;
        return this;
    }
}

然后我们如何使用它:

CoffeeDrink c = CoffeeDrink.buildNewDrink()
                         .withEspresso(2)
                         .withMilkType(2)
                         .withWhip();

如果我没有静态的内部Builder类,这仍然有效吗?我猜其中一个优点是,在调用方法.build()之前,它不会创建一个新的CoffeeDrink对象,但我仍然在创建一个Builder对象。只是想澄清一下


共 (1) 个答案

  1. # 1 楼答案

    不,这不是生成器模式。它是有效的Java,它将编译并运行。但是你的buildNewDrink()方法,不管它被称为build()buildNewDrink()或其他什么,只是一个简单的工厂方法,它创建了一个CoffeeDrink。其他方法就像setter方法一样,它们恰好返回自己

    static嵌套的构建器类是必需的。在推迟创建类实例时,它可以执行验证逻辑,以确保不创建无效对象。我不确定CoffeeDrink是否存在无效状态,但如果它存在,使用您的代码,就有可能创建一个CoffeeDrink,并在创建之后,但在调用其他方法之前,使其处于无效状态。构建器模式通过在构建实例之前验证数据来消除这种可能性。它还消除了构造函数爆炸的需要,在这种情况下,需要大量具有所有可能参数组合的构造函数来覆盖所有可能的情况