构建者模式Builder创建对象
構建者(Builder)設計模式(又叫生成器設計模式):
當一個類的內部數據過于復雜的時候(通常是負責持有數據的類,比如Config、VO、PO、Entity...),要創建的話可能就需要了解這個類的內部結構,還有這些東西是怎么組織裝配等一大坨亂七八糟的東西,這個時候就會增加學習成本而且會很混亂,這個時候就想啊想一種什么法子來管理一下這個類中的數據呢,怎么在創建的時候讓它按部就班的來,并且代碼可讀性很好別讓我看花了眼啊,我要的東西也能都很好設置進來,這就是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();
再對比一下如果不使用構造者模式(一般情況下的用法):
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
Student s=new Student("CC","qwerty","男","銀河系第二旋臂");
對比一下進行一個優劣性分析:
一般的套路:優點是比較簡單,開發效率高,缺點是如果參數真的很多的話鬼知道每個對應的是什么意思啊。
Builder模式:優點是可以將構造器的setter方法名取成類似注釋的方式,這樣我們可以很清晰的知道剛才究竟設置的什么值,可讀性較高,缺點是比較冗長。
總結:初步的理解Builder模式解決了要設置的參數過多不好管理的問題
總結
以上是生活随笔為你收集整理的构建者模式Builder创建对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 石龙芮的功效与作用 石龙芮能吃吗_中药知
- 下一篇: shutdown命令