目的是为了解决使用构造器方法时排列组合爆炸及使用时的繁琐性,及调用JavaBean实现方法时的线程安全性问题。
public class NutritionFacts{
private int servingSize ;
private int servings ;
private int categories ;
private int fat;
private int sodium;
private int carbohydrate;
public static class Builder{
//required no default value
private final int servingSize;
private final int servings;
//optional parameters initial default values
private int categories = 0;//default value
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 categories(int val) {
this.categories = val;
}
public Builder fat(int val){
this.fat = val;
}
public Builder sodium(int val){
this.sodium = val;
}
public Builder carbohydrate(int val){
this.carbohydrate = val;
}
//builder
public NutritionFacts build() {
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder){
servingSize = builder.servingSize;
servings = builder.servings;
categories = builder.categories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
}
调用方式
NutritionFacts cocaCola = new NutritionFacts.Builder(240,8).categories(100).sodium(35).carbohydrate(27).build();
使用了Builder静态内部类,实现调用。并且使用一行代码调用的方式保证线程的安全性。