对于这样的的类,应该用怎样编写构造方法呢?我们一项习惯采用构造方法重载的方式来实现,但这样如果要使创建对象灵活,其构造方法之多可想而知了。那么,让我们来试试使用构建器来实现吧!
public 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;
private NutritionFacts(Builder builder){
servingSize=builder.servingSize;
servings=builder.servings;
calories=builder.calories;
fat=builder.fat;
sodium=builder.sodium;
carbohydrate=builder.carbohydrate;
}
public static class Builder{
//必要的参数
private final int servingSize;
private final int servings;
//可选参数
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;
}
public NutritionFacts build(){
return new NutritionFacts(this);
}
}
public static void main(String[] args) {
NutritionFacts cocaCola1=new NutritionFacts.Builder(240,8).build();
NutritionFacts cocaCola2=newNutritionFacts.Builder(240,8).calories(100).build();
NutritionFacts cocaCola3=new NutritionFacts.Builder(240,8).sodium(35).build();
}
}
大家有没有觉得比起构造方法简单、灵活多了呢?如果以后遇到这样的问题,就请大家尝试着用构建器方法来解决吧!
参考:effective java