/**
* 建造者模式
* @author ayang
* @date: 2019年1月30日 下午2:27:14
* @Description:
*/
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 carbydrate;
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 carbydrate = 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 carbydrate(int val) {
carbydrate = val;
return this;
}
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;
carbydrate = builder.carbydrate;
}
@Override
public String toString() {
return "NutritionFacts [servingSize=" + servingSize + ", servings=" + servings + ", calories=" + calories
+ ", fat=" + fat + ", sodium=" + sodium + ", carbydrate=" + carbydrate + "]";
}
}
public static void main(String[] args) {
NutritionFacts nutritionFacts = new NutritionFacts.Builder(12, 0)
.calories(12).fat(10).sodium(22).carbydrate(11).build();
System.out.println(nutritionFacts);
}
结果:
NutritionFacts [servingSize=12, servings=0, calories=12, fat=10, sodium=22, carbydrate=11]
这种模式适用于需要多个构造器构建不同的bean对象,用建造者模式可以不用使用这么多的构造器 简单明了!