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

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

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


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

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

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

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



          具體實現代碼:
          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 胡鵬 閱讀(554) 評論(0)  編輯  收藏 所屬分類: java基礎讀《effective java》筆記

          導航

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

          統(tǒng)計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          agile

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 隆昌县| 吴旗县| 元阳县| 博湖县| 山西省| 蓬安县| 宜宾市| 五大连池市| 怀化市| 秦安县| 牡丹江市| 隆安县| 梁河县| 岑巩县| 海晏县| 泾阳县| 兴宁市| 仙桃市| 荥经县| 沂南县| 永嘉县| 新建县| 崇文区| 城固县| 咸丰县| 和平区| 宽甸| 马龙县| 翁牛特旗| 喀喇沁旗| 会东县| 永泰县| 田林县| 苗栗县| 东辽县| 隆昌县| 临泽县| 旬阳县| 历史| 和龙市| 十堰市|