В Java и C # вы можете создать объект со свойствами, которые можно установить при инициализации, либо определив конструктор с параметрами, определив каждое свойство после создания объекта, либо используя шаблон интерфейса Builder / Fluid. Однако в 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
почему я продолжаю видеть подобные вопросы? Построитель - это шаблон проектирования. Конечно, он может быть представлен как языковая функция, но в конце концов это просто шаблон проектирования. Шаблон дизайна не может быть «неправильным». Это может или не может удовлетворить ваш вариант использования, но это не делает весь шаблон неправильным, только его применение. Помните, что в конце концов шаблоны проектирования решают конкретные проблемы - если вы не столкнулись с проблемой, то зачем вам пытаться ее решить?