Я читаю книгу Джоша Блоха Эффективная Java, и он предлагает использовать шаблон проектирования строителя при создании объектов с большим количеством членов. Из того, что я вижу, это не шаблон дизайна ванили, но выглядит как его вариация. Мне очень нравится его внешний вид и пытаюсь использовать его в веб-приложении C#, которое я пишу. Это код, написанный на Java и работает отличноКак понятие Java статично отличается от C#?
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);
}
}
}
Тогда я получаю предупреждение компилятора. Большинство из них «не могут объявлять члены экземпляра в статическом классе».
Итак, мой вопрос - во-первых, что я пропустил? Если я что-то пропустил, могу ли я сделать это так, как рекомендует Джош Блох, но на C#, и, наконец, и этот важный тоже, это поточно-безопасный?
Что такое «версия»: P у вас есть эффективная Java? У меня старый, и он не охватывает Builder. Я читал, что это была одна из новых глав, добавленных после опыта Джоша @ Google. – OscarRyz