<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小说| 99re在线免费视频| 美女尿口扒开图片免费 | 久久久久亚洲爆乳少妇无 | 男人免费视频一区二区在线观看| 国产亚洲真人做受在线观看| 18禁网站免费无遮挡无码中文 | 91免费人成网站在线观看18| 亚洲Av无码国产一区二区| 亚洲国产成人久久综合一 | 亚洲伊人久久大香线蕉综合图片 | 在线亚洲午夜理论AV大片| 国产92成人精品视频免费| 日韩在线观看免费完整版视频| 亚洲色欲或者高潮影院| 亚洲乱码中文字幕手机在线 | 99精品视频在线视频免费观看| 欧美亚洲精品一区二区| 亚洲性一级理论片在线观看| 区三区激情福利综合中文字幕在线一区亚洲视频1| 84pao强力永久免费高清| 色爽黄1000部免费软件下载| 亚洲AV无码成人专区| 久久亚洲国产精品五月天| 亚洲第一网站男人都懂| 国产一精品一AV一免费孕妇| 久久精品国产这里是免费| 又硬又粗又长又爽免费看 | 亚洲国产精品xo在线观看| 亚洲日产韩国一二三四区| 又粗又硬又黄又爽的免费视频| 国产成人午夜精品免费视频| 无码免费一区二区三区免费播放| 国产成人无码免费网站|