<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

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


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

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

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

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



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

    導航

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

    統(tǒng)計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    agile

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 毛片免费在线观看网址| 免费的全黄一级录像带| 99久久免费精品国产72精品九九| 亚洲自偷自拍另类图片二区| 18女人水真多免费高清毛片| 亚洲综合激情六月婷婷在线观看| 午夜免费福利视频| 自怕偷自怕亚洲精品| 国产香蕉免费精品视频| 亚洲成人福利在线| 国产成人免费高清激情视频| 亚洲色图激情文学| 国产精品视_精品国产免费| 色多多免费视频观看区一区| 亚洲精品NV久久久久久久久久| 一边摸一边桶一边脱免费视频| 天天爽亚洲中文字幕| 性短视频在线观看免费不卡流畅 | 亚洲中文字幕久久精品无码APP| 国产精品综合专区中文字幕免费播放| 国产精品V亚洲精品V日韩精品| 中文字幕免费不卡二区| 久久久久亚洲av无码专区导航| 成视频年人黄网站免费视频| 亚洲国产AV一区二区三区四区| 亚洲国产电影av在线网址| 国产日韩一区二区三免费高清| 亚洲欧洲视频在线观看| 女人18毛片水真多免费看| 一级a性色生活片久久无少妇一级婬片免费放| 亚洲精品一级无码中文字幕| a级毛片视频免费观看| 亚洲婷婷在线视频| 免费看国产一级片| 亚洲视频免费在线观看| 亚洲中文字幕乱码AV波多JI| 国产精品亚洲mnbav网站| 69免费视频大片| 免费视频成人国产精品网站| 亚洲国产日韩在线成人蜜芽| 四虎永久成人免费|