Trong Java và C #, bạn có thể tạo một đối tượng với các thuộc tính có thể được đặt khi khởi tạo bằng cách xác định hàm tạo với các tham số, xác định từng thuộc tính sau khi xây dựng đối tượng hoặc sử dụng mẫu giao diện của trình xây dựng / chất lỏng. Tuy nhiên, C # 3 đã giới thiệu bộ khởi tạo đối tượng và bộ sưu tập, có nghĩa là mẫu xây dựng phần lớn là vô dụng. Trong một ngôn ngữ không có trình khởi tạo, người ta có thể triển khai trình xây dựng sau đó sử dụng nó như sau:
Vehicle v = new Vehicle.Builder()
.manufacturer("Toyota")
.model("Camry")
.year(1997)
.colour(CarColours.Red)
.addSpecialFeature(new Feature.CDPlayer())
.addSpecialFeature(new Feature.SeatWarmer(4))
.build();
Ngược lại, trong C # người ta có thể viết:
var vehicle = new Vehicle {
Manufacturer = "Toyota",
Model = "Camry",
Year = 1997,
Colour = CarColours.Red,
SpecialFeatures = new List<SpecialFeature> {
new Feature.CDPlayer(),
new Feature.SeatWarmer { Seats = 4 }
}
}
... Loại bỏ sự cần thiết của một người xây dựng như trong ví dụ trước.
Dựa trên những ví dụ này, các trình xây dựng có còn hữu ích trong C # hay chúng đã được thay thế hoàn toàn bởi các trình khởi tạo?
are builders useful
Tại sao tôi cứ nhìn thấy những câu hỏi như vậy? Builder là một mẫu thiết kế - chắc chắn, nó có thể được hiển thị như một tính năng ngôn ngữ nhưng vào cuối ngày nó chỉ là một mẫu thiết kế. Một mẫu thiết kế không thể "sai". Nó có thể hoặc không thể đáp ứng trường hợp sử dụng của bạn nhưng điều đó không làm cho toàn bộ mẫu bị sai, chỉ là ứng dụng của nó. Hãy nhớ rằng vào cuối ngày, các mẫu thiết kế sẽ giải quyết các vấn đề cụ thể - nếu bạn không gặp phải vấn đề này, vậy tại sao bạn lại thử giải quyết nó?