原文:https://blog.csdn.net/michael_f2008/article/details/77715075
//Builder Pattern public class NutritionFacts{ public final int servingSize; public final int servings; public final int calories; public final int fat; public final int sodium; public final int carbohydrate; //静态内部类Builder public static class Builder{ //必选变量 private final int servingSize; private final int servings; //可选变量 private final int calories = 0; private final int fat = 0; private final int sodium= 0; private final int carbohydrate= 0; //Builder的构造函数 public Builder(int servingSize, int servings){ this. servingSize = servingSize; this.servings = servings; } //Builder的成员方法返回其自身,所以可以链式调用 //类似于setter()方法 public Builder calories(int val){ calories = val; return this; } public Builder fat(int val){ fat = val; return this; } public Builder sodium(int val){ sodium = val; return this; } public Builder carbohydrate(int val){ carbohydrate = val; return this; } //Builder的build方法,返回外部类的实例 public NutritionFacts build(){ return new NutritionFacts(this); } } //外部类的构造函数 private NutritionFacts(Builder build){ servingSize = build.servingSize; servings = build.servings; calories = build.calories; fat = build.fat; sodium = build.sodium; carbohydrate = build.carbohydrate; } }
示例:
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).calories(100).sodium(35).carbohydrate(27).build();