首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

EffectiveJava-第2条 碰到多个构造器参数时要考虑用构建器

2012-11-16 
EffectiveJava-第2条 遇到多个构造器参数时要考虑用构建器遇到多个构造器参数时要考虑用构建器,且看最佳实

EffectiveJava-第2条 遇到多个构造器参数时要考虑用构建器
遇到多个构造器参数时要考虑用构建器,且看最佳实践代码

public 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;//对象域抛出异常if(this.fat>this.sodium){    throw new IllegalArgumentException("The fat must be little than sodium!!");}}public static void main(String[] args){NutritionFacts cocaCola = new NutritionFacts.Builder(240,8).calories(100).sodium(35).carbohydrate(27).build();System.out.println(cocaCola);}}
                

4、builder模式解决了上述问题
    适应多参数,安全,方便编写,可维护性高。   
5、builder实现   
    builder模式的一种实现方式:NutritionFacts类
    对参数强加约束条件的方式。      
6、builder模式缺点
    为了创建对象,必须先创建它的构建器,开销增大。
    实现冗长,比重叠构造器更冗长,只有在很多参数的时候才使用。   
总结   
   本实现是builder模式的实现的一种方式。  
   如果类的构造器或者静态工厂中具有多个参数,设计时使用Builder模式是很好的选择。
   Q:什么情况下不用??hibernate的domain

热点排行