package com.roykw.builder;
/**
* 营养成分类
*
* 构建器适用的情况如下:
* 构造器或者静态工厂有多个参数,特别是当大多数的参数是可选的时候
*
* @author Dr.King
*/
public class NutritionFacts {
//required
private int totalServingSize; //总份量(required)
private int perServingSize; //每份的份量(required)
//option
private int calories;
private int fat;
private int sodium;
private int carbohydrate;
public int getTotalServingSize() {
return totalServingSize;
}
public void setTotalServingSize(int totalServingSize) {
this.totalServingSize = totalServingSize;
}
public int getPerServingSize() {
return perServingSize;
}
public void setPerServingSize(int perServingSize) {
this.perServingSize = perServingSize;
}
public int getCalories() {
return calories;
}
public void setCalories(int calories) {
this.calories = calories;
}
public int getFat() {
return fat;
}
public void setFat(int fat) {
this.fat = fat;
}
public int getSodium() {
return sodium;
}
public void setSodium(int sodium) {
this.sodium = sodium;
}
public int getCarbohydrate() {
return carbohydrate;
}
public void setCarbohydrate(int carbohydrate) {
this.carbohydrate = carbohydrate;
}
public NutritionFacts(NFBuilder builder){
this.totalServingSize = builder.totalServingSize;
this.perServingSize = builder.perServingSize;
this.calories = builder.calories;
this.fat = builder.fat;
this.sodium = builder.sodium;
this.carbohydrate = builder.carbohydrate;
}
/**
* 实现构建器
* @author Dr.King
*/
public static class NFBuilder implements Builder<NutritionFacts>{
//required
private int totalServingSize; //总份量(required)
private int perServingSize; //每份的份量(required)
//option
private int calories = 0;
private int fat = 0;
private int sodium = 0;
private int carbohydrate = 0;
public NFBuilder(int tSize,int pSize){
this.totalServingSize = tSize;
this.perServingSize = pSize;
}
public NFBuilder calories(int c){
this.calories = c;
return this;
}
public NFBuilder fat(int f){
this.fat = f;
return this;
}
public NFBuilder sodium(int s){
this.sodium = s;
return this;
}
public NFBuilder carbohydrate(int c){
this.carbohydrate = c;
return this;
}
@Override
public NutritionFacts build() {
return new NutritionFacts(this);
}
}
public static void main(String[] args) {
NutritionFacts nutritionFacts = new NutritionFacts.NFBuilder(100, 10).calories(100).carbohydrate(200).build();
System.out.println("carbohydrate:" + nutritionFacts.getCarbohydrate());
}
}
builder接口如下:
package com.roykw.builder;
/**
* 构建者
* @author Dr.King
* @param <T>
*/
public interface Builder<T> {
/**
* 得到T
* @return T
*/
public T build();
}