在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
为什么我总是看到这些问题?生成器是一种设计模式-当然,它可能会作为一种语言功能公开,但归根结底,这只是一种设计模式。设计模式不能为“错误”。它可能会或可能不会满足您的用例,但这不会使整个模式错误,仅会导致应用程序错误。请记住,设计模式最终会解决特定的问题-如果您不面对问题,那么为什么还要尝试解决呢?