**
总结:这种设计模式,主要应用在,构造器或者静态工厂中具有多个参数的情况下,builder是一个不错的选择.
参数分为必选参数和可选参数
**
代码:
package com.hgh.effectivejava.builder;
public class BuilderTest {
public static void main(String[] args) {
NutritionFacts nutritionFacts= new NutritionFacts.Builder(0, 0).calories(1).carbohydrate(2).fat(3).sodium(4).builder();
System.out.println(nutritionFacts.toString());
//NutritionFacts [servingSize=0, servings=0, calories=1, fat=3, sodium=3, carbohydrate=2]
}
}
package com.hgh.effectivejava.builder;
import org.eclipse.jdt.internal.compiler.lookup.ClassScope;
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;
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 calories){
this.calories = calories;
return this;
}
public Builder fat(int fat){
this.fat = fat;
return this;
}
public Builder sodium(int sodium){
this.sodium = sodium;
return this;
}
public Builder carbohydrate(int carbohydrate){
this.carbohydrate = carbohydrate;
return this;
}
public NutritionFacts builder() {
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder){
this.servingSize = builder.servingSize;
this.servings = builder.servings;
this.calories = builder.calories;
this.carbohydrate = builder.carbohydrate;
this.fat = builder.fat;
this.sodium = builder.fat;
}
@Override
public String toString() {
return "NutritionFacts [servingSize=" + servingSize + ", servings="
+ servings + ", calories=" + calories + ", fat=" + fat
+ ", sodium=" + sodium + ", carbohydrate=" + carbohydrate + "]";
}
}