看《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即可。