原文: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();