我正试图在C#中重新创建我在《有效Java》一书中找到的这种优雅的构建器模式,但我不是C#的专家。
// Builder Pattern
public class NutritionFacts {
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public static class Builder {
// Optional parameters - initialized to default values
private int calories = 0;
private int fat = 0;
private int carbohydrate = 0;
private int sodium = 0;
public Builder();
public Builder calories(int val) { calories = val; return this; }
public Builder fat(int val) { fat = val; return this; }
public Builder carbohydrate(int val) { carbohydrate = val; return this;}
public Builder sodium(int val) { sodium = val; return this; }
public NutritionFacts build() {
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder) {
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
}
使用此构建器,您可以像这样创建NutritionFacts对象,并逐一提供构造函数参数:
NutritionFacts cocaCola = new NutritionFacts.Builder(). calories(100).sodium(35).carbohydrate(27).build();
但是,似乎在C#中,静态嵌套类中不允许使用非静态参数。那么,如何将其转换为C#?
谢谢。
答案 0 :(得分:-3)
一种解决方案是将Builder
类拉到NutritionFacts
类之外。您也可以将名称更改为NutritionFacstBuilder
。