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();
閱讀更多 老孔說編程 的文章