代碼優化----使用builder模式構造對象

看《effective java》的時候,創建對象章節提到使用builder模式來創建對象。覺得非常好用,做一個記錄。以後應該就會這麼寫啦~~~~~~ 對於一個有很多屬性的類,在爲屬性賦值時,通常會用到兩種方式,構造函數或者set方法。

  • 使用構造函數的時候,如果參數非常多,我們創建對象的時候就會比較痛苦,因爲一長串的參數,我們如果想知道哪些值什麼意思,就需要一個一個數着參數來探個究竟。對於多個參數類型一樣的構造函數,創建對象簡直就是噩夢。顛倒了其中兩個參數的順序,編譯器也不會報錯,在運行時出現錯誤也很難排查。
  • 使用set方法設置必要的參數,是比較常見的一種寫法。可讀性也比較高。但是文中說,“javaBean模式(也就是set方法)自身有着很嚴重的缺點,因爲構造過程被分到了幾個調用中,在構造過程中JavaBean可能處於不一致的狀態”,這一點可能我們都很少想到。

duangduangduang。。。。。。Builder模式可以彌補以上不足。

讓bean每個屬性的set方法都返回一個對象本身的引用。代碼如下:

public class User {
    private String name;
    private int age;
    private String sex;

    public User setName(String name) {
        this.name = name;
        return this;
    }

    public User setAge(int age) {
        this.age = age;
        return this;
    }

    public User setSex(String sex) {
        this.sex = sex;
        return this;
    }
}

給User對象賦值就變成了:

 User user = new User().setAge(10).setName("張").setSex("男");

是不是很簡潔。。。。。

IDEA也支持這種寫法呢,很簡單,只需要在創建setter的時候,把默認Template換成builder即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章