04.26 設計模式之 Builder

Builder 模式定義:

將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示.

Builder 模式是一步一步創建一個複雜的對象,它允許用戶可以只通過指定複雜對象的類型和內容就可以構建它們.用戶不知道內部的具體構建細節.Builder 模式是非常類似抽象工廠模式,細微的區別大概只有在反覆使用中才能體會到.

為何使用?

是為了將構建複雜對象的過程和它的部件解耦.注意: 是解耦過程和部件.

因為一個複雜的對象,不但有很多大量組成部分,如汽車,有很多部件:車輪 方向盤 發動機還有各種小零件等等,部件很多,但遠不止這些,如何將這些部件裝配成一輛汽車,這個裝配過程也很複雜(需要很好的組裝技術),Builder 模式就是為了將部件和組裝過程分開.

下面舉例說明:

public class Student {

private int id;

private String name;

private String passwd;

private String sex;

private String address;

// 構造器儘量縮小範圍

private Student() {

}

// 構造器儘量縮小範圍

private Student(Student origin) {

// 拷貝一份

this.id = origin.id;

this.name = origin.name;

this.passwd = origin.passwd;

this.sex = origin.sex;

this.address = origin.address;

}

public int getId() {

return id;

}

public String getName() {

return name;

}

public String getPasswd() {

return passwd;

}

public String getSex() {

return sex;

}

public String getAddress() {

return address;

}

/**

* Student的創建完全依靠Student.Builder,使用一種方法鏈的方式來創建

*

*/

public static class Builder {

private Student target;

public Builder() {

target = new Student();

}

public Builder address(int id) {

target.id = id;

return this;

}

public Builder name(String name) {

target.name = name;

return this;

}

public Builder password(String passwd) {

target.passwd = passwd;

return this;

}

public Builder sex(String sex) {

target.sex = sex;

return this;

}

public Builder address(String address) {

target.address = address;

return this;

}

public Student build() {

return new Student(target);

}

}

}

Student並不是直接new出來的,對其構造器進行了處理使其可訪問範圍儘可能的小,只讓它通過Student.Builder來構建自己,在Student.Builder中提供了一種類set的方法鏈的方式來設置值,然後在最後的build()方法的時候會返回一個Student對象,現在要創建一個Student對象,代碼如下:

Student s=new Student.Builder().name("CC").password("qwerty").sex("男").address("銀河系第二旋臂").build();


分享到:


相關文章: