Tôi có một câu hỏi liên quan đến "Mẫu Builder" được đề cập trong "Java hiệu quả". Chúng ta có cần một phương thức .build()
để nó có thể triển khai đúng mẫu không? Ví dụ, giả sử rằng chúng ta có lớp sau:Chúng ta có cần phương thức .build() trong Mẫu Builder không?
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;
}
}
Và rồi thế nào chúng ta sử dụng nó:
CoffeeDrink c = CoffeeDrink.buildNewDrink()
.withEspresso(2)
.withMilkType(2)
.withWhip();
có này vẫn có giá trị nếu tôi không có một nội Builder
lớp tĩnh? Tôi đoán rằng một trong những lợi thế là nó giữ tắt từ việc tạo ra một đối tượng CoffeeDrink
mới cho đến khi phương thức .build()
được gọi, nhưng tôi vẫn đang tạo đối tượng Builder
. Chỉ cần tìm kiếm một số giải thích.
Các mẫu Builder được sử dụng để lợi thế lớn với các lớp không thay đổi. Với họ, Builder là một lớp "trợ giúp" có thể thay đổi giúp hỗ trợ việc xây dựng cuối cùng của sản phẩm cuối cùng mà sau đó không thay đổi được. Ví dụ của bạn chỉ đơn thuần là một POJO đơn giản và nó chia sẻ những bất lợi của JavaBeans (có thể thay đổi, có thể được xem ở trạng thái không hoàn chỉnh hoặc không nhất quán, v.v.). – scottb