设计模式初探-Builder模式(二)
2014-11-24 07:25:46
·
作者:
·
浏览: 1
nt calories;//卡路里 可选
private final int fat;//脂肪 可选
private final int sodium;//钠 可选
private final int carbohydrate;//碳水化合物 可选
public static class Builder{
//必需参数
private final int servings;
//可选参数
private int calories = 0;
private int fat = 0;
private int sodium = 0;
private int carbohydrate = 0;
public Builder(int servings){
this.servings = servings;
}
public Builder calories(int cal){
calories = cal;
return this;
}
public Builder fat(int fat){
this.fat = fat;
return this;
}
public Builder sodium(int sod){
this.sodium = sod;
return this;
}
public Builder carbohydrate(int car){
this.carbohydrate = car;
return this;
}
public NutritionFacts build(){
return new NutritionFacts(this);
}
}
/*
*私有化构造器,创建该对象只能通过构建器
*/
private NutritionFacts(Builder builder){
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
public void print(){
System.out.println("servings:"+servings);
System.out.println("calories:"+calories);
System.out.println("fat:"+fat);
System.out.println("sodium:"+sodium);
System.out.println("carbohydrate:"+carbohydrate);
}
public static void main(String[] args) {
NutritionFacts cocaCola = new NutritionFacts.Builder(600).calories(20).carbohydrate(300).build();
cocaCola.print();
}
}
四、模式优缺点
优点:
1、可以改变一个产品的内部表示,比如示例中只要实现一个新的ComputerBuilder就能改变电脑的内部组件,因为电脑的表示和内部结构是独立于客户端代码的。
2、将构造代码和表示代码分离,构造代码相当于builder,表示代码相当于director。不同的导向器可以使用相同的生成器也构造不同的产品。
3、使我们可对构造过程进行更精细的控制,比如示例2中可以在构建过程加入有效性验证等。