<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

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 色欲色欲天天天www亚洲伊| 亚洲综合久久一本伊伊区| 特级毛片A级毛片免费播放| 成人免费视频试看120秒| 中文字幕无码精品亚洲资源网久久| 精品免费人成视频app| 亚洲国产综合第一精品小说| 亚洲一区在线免费观看| 亚洲AV综合色区无码二区偷拍 | 日韩在线视精品在亚洲| 日本免费电影一区| 深夜特黄a级毛片免费播放| 亚洲国产精品尤物yw在线| 久久久久免费视频| 午夜影视日本亚洲欧洲精品一区| 久久青草免费91线频观看站街| 亚洲色欲www综合网| 青草草色A免费观看在线| 久久人午夜亚洲精品无码区| 又粗又硬又黄又爽的免费视频| 国产裸体美女永久免费无遮挡 | 亚洲色无码专区在线观看| 日本免费人成网ww555在线| 亚洲国产电影在线观看| 国产禁女女网站免费看| 久久精品成人免费观看97| 亚洲国产成人久久综合碰碰动漫3d | 无码一区二区三区免费| 亚洲免费电影网站| 又黄又大又爽免费视频| 久久精品免费一区二区三区| 精品日韩亚洲AV无码一区二区三区 | 成全在线观看免费观看大全| 亚洲国产成人综合| 免费观看日本污污ww网站一区| A毛片毛片看免费| 亚洲毛片免费视频| 亚洲精品国产va在线观看蜜芽| 久久国产免费观看精品3| 亚洲AV无码专区在线厂| 亚洲综合自拍成人|