public class _2_2_NutritionFacts {
private final int servingSize;
private final int serving;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
private _2_2_NutritionFacts(Builder builder) {
this.servingSize = builder.servingSize;
this.serving = builder.serving;
this.calories = builder.calories;
this.fat = builder.fat;
this.sodium = builder.sodium;
this.carbohydrate = builder.carbohydrate;
}
public static class Builder{ // 构建器的建立,与原类具有相同的域,通过构建器构建的对象再赋值给原来的对象
private final int servingSize; // 静态内部类不能引用外部类的成员或方法
private final int serving;
private int calories;
private int fat;
private int sodium;
private int carbohydrate;
public Builder(int servingSize,int serving) {
this.servingSize = servingSize;
this.serving = serving;
}
public Builder calories(int calories) { // 每个域的修改都是返回一个Builder,最后再用这个Builder来创建对象
this.calories = calories;
return this;
}
public Builder fat(int fat) {
this.fat = fat;
return this;
}
public Builder sodium(int sodium) {
this.sodium = sodium;
return this;
}
public Builder carbohydrate(int carbohydrate) {
this.carbohydrate = carbohydrate;
return this;
}
public _2_2_NutritionFacts biuld() {
return new _2_2_NutritionFacts(this);
}
}
public static void main(String args[]) {
_2_2_NutritionFacts food = new _2_2_NutritionFacts.Builder(20, 100).calories(100).carbohydrate(100).fat(100).sodium(100).biuld();
}
}
/*
* Builder 模式:
* 利用Builder 构建器创建对象,适合参数较多的对象的构造
构造一个Builder构建器,其属性拥有和要构建的对象有相同的成员
在构建器里面为构建器里的每个成员都定义一个修改的方法,并且返回这个构建器
public Builder fat(int fat){this.fat = fat;return this;}
然后再定义一个builder 方法,返回要构建的对象
public _2_2_NutritionFacts build(){
retunr new _2_2_NutritionFacts(this)
}
因为我们在build 方法里面要创建一个以builder 为参数的构造方法,所以要定义一个构造,因只在内部使用,应私有
private _2_2_NutritionFacts(Builder builder){} 然后将Builder里面的所有成员都赋值给 _2_2_NutritionFacts 的成员
然后我们生成对象的时候就可以调用
new _2_2_NutritionFacts.Builder().a(3).b(23).build();
*/