建造者模式(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。
为什么我看到内部构建器 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。