建造者模式(java)。为什么 Builder class public?

Builder pattern (java). Why is Builder class public?

为什么我看到内部构建器 class 的每个地方都是 public 静态的?它不应该是私有静态的吗?也许我没有看到什么,但我会说它会更好。谁能给我解释一下?

@Getter @AllArgsConstructor @ToString
public class CarDto {

private final String make;
private final int seatCount;
private final String type;
private final CarDto carDto;

public static Builder builder(){
    return new Builder();
}


private static class Builder{
    private String make;
    private int seatCount;
    private String type;
    private CarDto carDto;


    public Builder make(String make){
        this.make = make;
        return this;
    }

    public Builder seatCount(int seatCount){
        this.seatCount = seatCount;
        return this;
    }

    public Builder type(String type){
        this.type = type;
        return this;
    }

    public Builder carDto(CarDto carDto){
        this.carDto = carDto;
        return this;
    }

    public CarDto create(){
        return new CarDto(make, seatCount,type,carDto);
    }
}
}

Builder 必须是 public 才能从其他 类 访问。尝试获取构建器,调用静态工厂方法 CarDto.builder() 否则 - 您将无法使用任何构建方法,例如 seatCount(), ..., create().

私有 Builder class 将毫无用处。首先,您甚至无法做到这一点:

public static Builder builder() {
    return new Builder();
}

因为您无法从 public 方法公开私有 class。

Builder 必须可以从您的 class 外部获得。否则你将如何使用它来创建你的对象。您可以创建一个返回 Builder 实例的静态工厂方法,但 class 本身仍然必须是 public。