2.遇到多个构造器参数时要考虑用构建器
使用builder模式生成对象,参考示例代码
// Builder Patternpublic 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 carbohydrate;public static class Builder {// Required parametersprivate final int servingSize;private final int servings;// Optional parameters - initialized to default valuesprivate int calories = 0;private int fat = 0;private int carbohydrate = 0;private int sodium = 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 carbohydrate(int val){ carbohydrate = val; return this; }public Builder sodium(int val){ sodium = val; return this; }public NutritionFacts build() {return new NutritionFacts(this);}}private NutritionFacts(Builder builder) {servingSize = builder.servingSize;servings = builder.servings;calories = builder.calories;fat = builder.fat;sodium = builder.sodium;carbohydrate = builder.carbohydrate;}}?使用构造器:
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).calories(100).sodium(35).carbohydrate(27).build();
?builder模式模拟了具名可选参数。
builder模式的不足:为了创建对象,必须先创建它的构建器,且更加冗长。
如果类的构造器或静态工厂中有多个参数,而且将来还可能增加参数,则使用builder模式就比较方便。