(一)Builder(建造者)模式
我們一般在構建javabean的對象的時候通常有三種寫法:
1.直接通過構造函數傳參的方式設置屬性,這種方法如果屬性過多的話會讓構造函數十分臃腫,而且不能靈活的選擇只設置某些參數。
2.采用重疊構造區模式,先寫第一個只有必要參數的構造器,第二個構造器有一個可選參數,第三個構造器有兩個可選參數,以此類推;如果參數比較多時,類里面會出現一堆構造方法,并且閱讀困難,很容易就把兩個屬性參數寫顛倒位置了,編譯不會出錯,但運行就會出錯了
3.采用Javabean 的寫法,寫一堆屬性的setter方法,通過生成對象,讓后調用setter方法給屬性賦值。 ?這種方法有個劣勢就是構造的過程被分到幾個調用中,在構造中可能處于不一致狀態,無法保證一致性。
今天我們可以嘗試采用Builder模式的寫法:
public class Person {private String name;private String address;private int age;private int sex;public Person(Builder builder) {this.name = builder.name;this.address = builder.address;this.age = builder.age;this.sex = builder.sex;}public static class Builder{private String name;private String address;private int age;private int sex;public Builder(String name) {this.name = name;}public Builder address(String address){this.address = address;return this;}public Builder age(int age){this.age = age;return this;}public Builder sex(int sex){this.sex = sex;return this;}public Person build(){return new Person(this);}}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;} }
使用如下: Person person = new Person.Builder("張三").address("上海").build(); Builder?方法是Person中的一個靜態內部類,屬性和Person中的屬性也都一致,所以屬性值在Builder中設置,然后通過builder方法構建Person對象。
采用javaBean 寫法的缺點就是, 一但調用 new Person() 構造函數后,對象就被創建了,以后在調用 set 方法設置屬性的時候這里設置一下,其他地方又設置一下,無法保證對象的狀態一致性,而且代碼的可讀性很差
1. Builder 方式創建的對象,在調用 build() 方法之前是不會創建Request 對象的,所有的屬性設置都必須在 build() 方法之前,而且創建了 Request 對象后就不可以更改其屬性了,這就保證了對象狀態的唯一性,而且代碼的可讀性也提高了。
2.Builder可以實現類似setter的自由選擇參數
轉載于:https://www.cnblogs.com/lkf-00889/p/7286338.html
總結
以上是生活随笔為你收集整理的(一)Builder(建造者)模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5199 元起,三星 Galaxy S2
- 下一篇: 美证监会称马斯克需要“推特保姆”看护,拒