讀《effective java》第二版,實用一,遇到多個構造器參數時要考慮用構造器

            第二條  遇到多個構造器參數時要考慮用構造器

          這里考慮的是參數多的情況,如果參數個數比較少,那直接采用一般的構造方法就可以了。


             書中介紹了寫構造方法的時候幾種方式:

              1. 重疊構造方法模式:
                 缺點:有許多參數的時候,客戶端代碼會很難寫,而且較難以閱讀。

               2. javaBeans模式:
                 缺點:  
                      在構造過程中JavaBean可能處于不一致的狀態,類本身無法判斷是否有效性。
                      類做成不可變的可能。

               3. builder模式:
                 優點:
                      在build方法生成對象的時候,可以做檢查,判斷是否符合要求
                      參數靈活
                 缺點:
                      創建對象必須先創建構造器,如果對性能要求非常高的應用少用為妙



          具體實現代碼:
          1.重疊構造方法模式:
          public class NutritionFacts {
              
          private final int servingSize;
              
              
          private final int serviings;
              
              
          private final int calories;
              
              
          private final int fat;
              
              
          private int sodium;
              
              
          private int carbohydrate;
              
              
          public NutritionFacts(int servingSize, int serviings){
                  
          this(servingSize, serviings, 0);
              }
              
              
          public NutritionFacts(int servingSize, int serviings, int calories){
                  
          this(servingSize, serviings, calories, 0);
              }
              
              
          public NutritionFacts(int servingSize, int serviings, int calories, int fat){
                  
          this(servingSize, serviings, calories, fat,0);
              }
              
              
          public NutritionFacts(int servingSize, int serviings, int calories, int fat, int sodium){
                  
          this(servingSize, serviings, calories, fat, sodium,0);
              }
              
              
          public NutritionFacts(int servingSize, int serviings, int calories, int fat, int sodium, int carbohydrate){
                  
          this.servingSize = servingSize;
                  
          this.serviings = serviings;
                  
          this.calories = calories;
                  
          this.fat = fat;
                  
          this.sodium = sodium;
                  
          this.carbohydrate = carbohydrate;
              }
          }



          2. javaBeans模式 代碼:
          public class NutritionFacts {
              
          private  int servingSize;
              
              
          private  int serviings;
              
              
          private  int calories;
              
              
          private  int fat;
              
              
          private int sodium;
              
              
          private int carbohydrate;
              
              
          public NutritionFacts(){}
              
              
              
          public void setServingSize(int servingSize) {
                  
          this.servingSize = servingSize;
              }

              
          public void setServiings(int serviings) {
                  
          this.serviings = serviings;
              }

              
          public void setCalories(int calories) {
                  
          this.calories = calories;
              }

              
          public void setFat(int fat) {
                  
          this.fat = fat;
              }

              
          public void setSodium(int sodium) {
                  
          this.sodium = sodium;
              }

              
          public void setCarbohydrate(int carbohydrate) {
                  
          this.carbohydrate = carbohydrate;
              }


           3. builder模式

          public class NutritionFacts {
              
          private final int servingSize;
              
          private final int serviings;
              
          private final int calories;
              
          private final int fat;
              
          private final int sodium;
              
          private final int carbohydrate;

              
          public static class Builder {
                  
          private final int servingSize;
                  
          private final int serviings;

                  
          // 可以為空
                  private int calories = 0;
                  
          private int fat = 0;
                  
          private int sodium = 0;
                  
          private int carbohydrate = 0;

                  
          public Builder(int servingSize, int serviings) {
                      
          this.servingSize = servingSize;
                      
          this.serviings = serviings;
                  }
                  
                  
          public Builder calories(int val){
                      calories 
          = val;
                      
          return this;
                  }
                  
                  
          public Builder fat(int val){
                      fat 
          = val;
                      
          return this;
                  }
                  
                  
          public Builder sodium(int val){
                      sodium 
          = val;
                      
          return this;
                  }
                  
                  
          public Builder carbohydrate(int val){
                      carbohydrate 
          = val;
                      
          return this;
                  }
                  
                  
          public NutritionFacts build(){
                      
          return new NutritionFacts(this);
                  }
                  
              }

              
          public NutritionFacts(Builder builder) {
                  servingSize 
          = builder.servingSize;
                  serviings 
          = builder.serviings;
                  calories 
          = builder.calories;
                  fat 
          = builder.fat;
                  sodium 
          = builder.sodium;
                  carbohydrate 
          = builder.carbohydrate;
              }
          }
           這個調用的時候: 
          NutritionFacts cocaCola = new NutritionFacts.Builder(11,22).calories(1).fat(2).calories(3).build();



          posted on 2009-12-17 20:25 胡鵬 閱讀(553) 評論(0)  編輯  收藏 所屬分類: java基礎讀《effective java》筆記

          導航

          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          agile

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 五峰| 武鸣县| 水城县| 曲阳县| 宕昌县| 衡东县| 吐鲁番市| 滨州市| 竹溪县| 江达县| 沧州市| 昆山市| 鄂伦春自治旗| 太白县| 昌吉市| 于田县| 贺兰县| 咸阳市| 湖北省| 太和县| 霍山县| 马公市| 云阳县| 巢湖市| 巍山| 剑川县| 湘潭县| 清苑县| 昌宁县| 忻州市| 万安县| 六枝特区| 琼结县| 新绛县| 淮滨县| 祥云县| 江川县| 历史| 兖州市| 六安市| 睢宁县|