/** *構建者模式使用場景是若是類的構造器或者靜態工程中具備多個參數時, *使用構造器或者靜態工程都比較麻煩;固然也能夠用JavaBeans的方式建立對象, *可是這種方式使得對象的狀態有可能不一致 */ public class Builder_model { public static void main(String[] args) { NutritionFacts nu = new NutritionFacts.NBuilder(1, 2).calories(3).sodium(4).fat(1).build(); System.out.println(nu); } } /**構建者接口**/ interface Builder<T> { public T build(); } /**一個類對應本身的構建器,能夠定義在類的內部**/ 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 carbohyrate; private NutritionFacts(NBuilder builder) { servingSize = builder.servingSize; servings = builder.servings; calories = builder.calories; fat = builder.fat; sodium = builder.sodium; carbohyrate = builder.carbohyrate; } public static class NBuilder implements Builder<NutritionFacts> { /**假設:構建NUtritionFacts必須的參數**/ private final int servingSize; private final int servings; /**可選參數**/ private int calories=0; private int fat=0; private int sodium=0; private int carbohyrate=0; public NBuilder(int servingSize, int servings) { this.servingSize = servingSize; this.servings = servings; } /**可選屬性的賦值**/ public NBuilder calories(int val) { calories = val; return this; } public NBuilder fat(int val) { fat = val; return this; } public NBuilder carbohyrate(int val) { carbohyrate = val; return this; } public NBuilder sodium(int val) { sodium = val; return this; } @Override public NutritionFacts build() { return new NutritionFacts(this); } } @Override public String toString() { return this.servingSize+this.servings+this.sodium+""; } }