靜態(tài)工廠和構(gòu)建器有個(gè)共同的局限性;他們都不能很好地?cái)U(kuò)展到大量的可選參數(shù)。
用Builder模式,不直接生成想要的對(duì)象,而是讓客戶端利用所有必要的參數(shù)調(diào)用構(gòu)造器
public class Nutrition{
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 Bulider{
//必須參數(shù)
private final int servingSize;
private final int servings;
//可選參數(shù)
private int calories=0;
privatre int fas=0;
private int carbohydrate=0;
private int sodium=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 carbohydrate(int val){
carbohydrate=val;
return this;
}
public Builder sodium(int val){
sodium=val;
return this;
}
public Nutrition build(){
return new Nutrition(this);
}
}
private Nutrition(Builder builder){
servingSize=builder.servingSize;
servings=builder.servings;
calories=builder.calories;
fat=builder.fat;
sodium=builder.sodium;
carbohydrate=builder.carbohydrate;
}
}
怎么使用呢?
Nutrition nutr=new Nutrition.Builder(240,8).calories(100).sodium(35).carbohyrate(27).build();