建立對象的幾種方式 構造器 靜態Factory 方法 通過Builder
不直接產生想要的對象,而是讓用戶端利用所有必要的參數調用構造器,得到一個builder對象,然後用戶端在builder對象上調用類似於setter的方法,來設定每個選擇性參數,最後在用戶端調用無參的build()方法來產生對象。下面是一個簡單的樣本:
//builder patternpublic 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 private final int servingSize; private final int servings; //optional private int calories =0; private int fat =0; private int sodium =0; private int carbohydrate =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 sodium(int val){ sodium=val; return this; } public Builder carbohydrate(int val){ carbohydrate=val; return this; } //build 構造對象 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; }}//用戶端調用NutritionFacts cocaCola = new NutritionFacts.Builder(20, 8).calories(100).sodium(35).carbohydrate(27).build();