У Java та C # ви можете створити об’єкт із властивостями, які можна встановити при ініціалізації, або визначивши конструктор з параметрами, визначивши кожну властивість після побудови об'єкта, або використовуючи шаблон інтерфейсу будівельника та флюїду. Однак C # 3 представив ініціалізатори об'єктів та колекцій, що означало, що модель побудови була багато в чому марною. Мовою без ініціалізаторів можна було б реалізувати конструктор, а потім використовувати його так:
Vehicle v = new Vehicle.Builder()
.manufacturer("Toyota")
.model("Camry")
.year(1997)
.colour(CarColours.Red)
.addSpecialFeature(new Feature.CDPlayer())
.addSpecialFeature(new Feature.SeatWarmer(4))
.build();
І навпаки, в C # можна було написати:
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 }
}
}
... усуваючи потребу в будівельнику, як це було показано в попередньому прикладі.
Виходячи з цих прикладів, чи все ще корисні будівельники в C #, або їх повністю витіснили ініціалізатори?
are builders useful
чому я все ще бачу такі запитання? Конструктор - це модель дизайну - звичайно, він може бути викритий як мовна особливість, але наприкінці дня це лише шаблон дизайну. Шаблон дизайну не може бути "неправильним". Він може або не може виконати ваш випадок використання, але це не зробить всю схему помилковою, просто її застосування. Пам'ятайте, що в кінці дня схеми дизайну вирішують конкретні проблеми - якщо ви не стикаєтеся з проблемою, то чому б ви намагалися її вирішити?