如果类的构造器或者静态工厂中具有多个参数,设计这样的类时,考虑使用Builder模式。尤其是大多数参数都是可选的时候,与使用传统的重叠构造器模式相比,使用
builder模式的客户端代码将更易于阅读和编写,构建器也比JavaBeans更加安全。示例如下
1 public class NutritionFacts { 2 private final int servingSize; 3 private final int servings; 4 private final int calories; 5 private final int fat; 6 private final int sodium; 7 private final int carbohydrate; 8 9 public NutritionFacts(Builder builder) { 10 servingSize = builder.servingSize; 11 servings = builder.servings; 12 calories = builder.calories; 13 fat = builder.fat; 14 sodium = builder.sodium; 15 carbohydrate = builder.carbohydrate; 16 } 17 18 public static class Builder { 19 private final int servingSize; 20 private final int servings; 21 private int calories = 0; 22 private int fat = 0; 23 private int carbohydrate = 0; 24 private int sodium = 0; 25 26 public Builder(int servingSize, int servings) { 27 this.servingSize = servingSize; 28 this.servings = servings; 29 } 30 31 public Builder calories(int val) { 32 calories = val; 33 return this; 34 } 35 36 public Builder fat(int val) { 37 fat = val; 38 return this; 39 } 40 41 public Builder carbohydrate(int val) { 42 carbohydrate = val; 43 return this; 44 } 45 46 public Builder sodium(int val) { 47 sodium = val; 48 return this; 49 } 50 51 public NutritionFacts build() { 52 return new NutritionFacts(this); 53 } 54 } 55 }