一、前言
在創(chuàng)建一個對象的時候,你是否是醬紫寫:
Student();
Student(String name);
Student(String name,int age);
Student(String name,int age,String address);
Student(String name,int age,String address,String id);
上面的寫法雖然效率高,但也有一些不足,對于代碼后期維護和協(xié)同開發(fā)會是一件很痛苦的事情。
再看看別人是醬紫寫的:
Student stu = new Student.Builder("小明")
.setAge(22)
.setAddress("青島")
.build();
System.out.println(stu);
?是不是很優(yōu)雅,而且在很多框架中也能看到這樣寫的身影。沒錯這就是接下來要講的構(gòu)建者模式,這樣好處是易于擴展和類的使用,但同時也失去了一些效率。
二、構(gòu)建者模式
構(gòu)建者模式實例代碼也沒啥好講的,大家記住,照著寫就行,代碼如下:
public class Student {
private final String name;
private int age;
private String address;
private Student(Builder builder) {
this.name = builder.name;
this.age = builder.age;
this.address = builder.address;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
public static class Builder {
//假設(shè)名字是必傳,并且不會變,我們設(shè)置成final
private final String name ;
private int age ;
private String address ;
//對象中如果有必傳參數(shù),應(yīng)該寫在這個地方。
public Builder(String name) {
this.name = name;
}
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setAddress(String address) {
this.address = address;
return this;
}
public Student build() {
return new Student(this);
}
}
}
使用方法如下:文章來源:http://www.zghlxwxcb.cn/news/detail-508537.html
Student student = new Student.Builder("小明") // 這個地方要傳的參數(shù)往往都是必傳數(shù)。
.setAge(12)
.setAddress("青島")
.build();
注意
Builder內(nèi)部類中的屬性要和Student中的相同。
如果Student中屬性有final修飾,Builder對應(yīng)的屬性也需要用final修飾。
并且內(nèi)部類中構(gòu)造方法,傳入必傳屬性
結(jié)尾
是不是看上去逼格瞬間上去了,非必傳屬性可以根據(jù)需要任意設(shè)置,非常靈活,而且這樣先設(shè)置屬性再創(chuàng)建對象,最終獲取的對象一定是你預(yù)期的完整對象,不會像用之前set的方法創(chuàng)建的對象可能還沒有設(shè)置完全。文章來源地址http://www.zghlxwxcb.cn/news/detail-508537.html
到了這里,關(guān)于設(shè)計模式-構(gòu)建者(Builder)模式詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!