设计模式初探-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中可以在构建过程加入有效性验证等。