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

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

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

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

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

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


       書中介紹了寫構(gòu)造方法的時候幾種方式:

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

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

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



    具體實現(xiàn)代碼:
    1.重疊構(gòu)造方法模式:
    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;
        }
    }
     這個調(diào)用的時候: 
    NutritionFacts cocaCola = new NutritionFacts.Builder(11,22).calories(1).fat(2).calories(3).build();



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

    導(dǎo)航

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

    統(tǒng)計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    agile

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: free哆啪啪免费永久| 亚洲视频在线观看免费视频| 国产三级在线观看免费| 成人片黄网站色大片免费观看APP| 亚洲乱码中文字幕在线| 亚洲另类春色国产精品| 亚洲AV无码一区二区三区系列 | 亚洲激情在线观看| 亚洲区日韩区无码区| 国产美女无遮挡免费视频网站| 国产成人免费高清激情明星| 男女作爱在线播放免费网站| 国产久爱免费精品视频| 精品在线免费视频| 亚洲AV成人无码网天堂| 久久精品亚洲AV久久久无码| 精品亚洲成a人片在线观看| 亚洲αv在线精品糸列| 亚洲乱码日产一区三区| 国产亚洲av片在线观看18女人| 国产青草视频免费观看97 | 羞羞视频在线观看免费| 亚洲人成网站色7799| 亚洲人xxx日本人18| 亚洲av永久无码精品天堂久久| 亚洲综合无码一区二区三区| 亚洲va在线va天堂va不卡下载| 国产亚洲一区二区三区在线观看| 国产AⅤ无码专区亚洲AV| 久久亚洲国产精品五月天婷| 久久国产乱子免费精品| 午夜免费福利视频| 777爽死你无码免费看一二区| 久久久99精品免费观看| 鲁大师在线影院免费观看| 人妻无码久久一区二区三区免费| 嫩草成人永久免费观看| 99re在线这里只有精品免费| 又大又硬又爽又粗又快的视频免费| 18禁黄网站禁片免费观看不卡| 91久久精品国产免费直播|