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(); */