package com.zxm;
/**
* Creator:zxm
* Date:2017/2/23
* 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 carbonhydrate ;
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 carbonhydrate = 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 carbonhydrate(int val){
carbonhydrate = val;
return this;
}
public NutritionFacts bulid(){
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder){
servingSize = builder.servingSize;
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbonhydrate = builder.carbonhydrate;
}
public static void main(String[] args) {
NutritionFacts cocaCola = new NutritionFacts.Builder(240,8).calories(100).sodium(35).carbonhydrate(27).bulid();
}
}
Bulider模式:
不直接生成想要的对象,而是让客户端利用所有必要参数调用构造器(或者静态工厂),得到一个Builder对象。然后在Builder对象上调用类似setter的方法来设置每个相关的可选参数。最后,客户端调用无参的build()方法来生成不可变的对象。这个Builder是它构建的类的静态成员类。
Builder的setter方法返回builder本身,以便把调用链接起来。