我正在阅读 Josh Bloch 的《Effective Java 》一书,他建议在构建具有大量成员的对象时使用构建器设计模式。据我所知,这不是香草设计模式,而是看起来像他的变体。我更喜欢它的外观,并试图在我正在编写的 C# Web 应用程序中使用它。这是用Java编写的代码并且可以完美运行
public class Property {
private String title;
private String area;
private int sleeps = 0;
public static void main(String[] args) {
Property newProperty = new Property.Builder("Test Property").Area("Test Area").Sleeps(7).build();
}
private Property(Builder builder) {
this.title = builder.title;
this.area = builder.area;
this.sleeps =builder.sleeps;
}
public static class Builder{
private String title;
private String area;
private int sleeps = 0;
public Builder (String title){
this.title = title;
}
public Builder Area(String area){
this.area = area;
return this;
}
public Builder Sleeps(int sleeps){
this.sleeps = sleeps;
return this;
}
public Property build() {
return new Property(this);
}
}
}
当我把它放入我认为是 C# 等价物时
public class Property
{
private String title;
private String area;
private Property(Builder Builder)
{
title = Builder.title;
area = Builder.area;
}
public static class Builder
{
// Required parameters
private String title;
private String area;
// Optional parameters
private int sleeps = 0;
public Builder(String val)
{
this.title = val;
}
public Builder Area(String val)
{
this.area = val;
return this;
}
public Builder Sleeps(int val)
{
this.sleeps = val;
return this;
}
public Property build()
{
return new Property(this);
}
}
}
然后我得到编译器警告。他们中的大多数“不能在静态类中声明实例成员”。
所以我的问题首先是我错过了什么?如果我遗漏了某些东西,我可以按照 Josh Bloch 推荐的方式但在 C# 中进行操作,最后,这一点也很重要,这是线程安全的吗?