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

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

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

duangduangduang。。。。。。Builder模式能夠彌補以上不足。函數

讓bean每一個屬性的set方法都返回一個對象自己的引用。代碼以下:ui

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對象賦值就變成了:this

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

是否是很簡潔。。。。。code

IDEA也支持這種寫法呢,很簡單,只須要在建立setter的時候,把默認Template換成builder便可。 對象

相關文章
相關標籤/搜索