4
我正在阅读Joshua Bloch的Effective Java。在16页的顶部,他说:在Effective Java书中实现Builder接口
Note that our NutritionFacts.Builder class could be declared to implement
Builder<NutritionFacts>.
但是,不管是“生成器”实现“生成器”界面,因为有一个命名空间冲突存在,如:
public static class Builder implements Builder<NutritionFacts>...
我应该重新命名内部静态类到像NutritionFacts.NutritionBuilder或什么?
这里是他提供的建造者模式:
// Builder Pattern
public class NutritionFacts {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public static class Builder {
// Required parameters
private final int servingSize;
private final int servings;
// Optional parameters - initialized to default values
private int calories = 0;
private int fat = 0;
private int carbohydrate = 0;
private int sodium = 0;
public Builder(int servingSize, int servings) {
this.servingSize = servingSize;
this.servings = servings;
}
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) {
servingSize = builder.servingSize;
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
}
是啊,我想过 - 但我不知道这是作者的意思。也许他的意思是把建筑师课程移到其他地方?虽然看起来不太可能...... – drozzy 2010-08-10 03:25:44
我不认为移动构建器类会有所帮助,无论它的名称与接口冲突如何。基本上,您的选择是更改类的名称,更改接口的名称或完全限定类声明中的接口。在我看来,对界面进行排位似乎是影响最小的变化 – 2010-08-10 17:10:04