在編寫(xiě)一個(gè)Java類的構(gòu)造函數(shù)的時(shí)候,如果成員變量過(guò)多,而且需要的搭配多種多樣诡曙,那么我們一般會(huì)選用函數(shù)的重載的形式去解決這個(gè)問(wèn)題臀叙。
然而, 如果成員變量特別多(大于4個(gè))价卤,并且每次需要的組合往往還不一樣劝萤。那該怎么辦呢?
舉個(gè)例子:
如果有一個(gè)類 Person慎璧,含有四個(gè)成員變量床嫌,Name,Age,Id,Money.
private String Name;
private int Age;
private int Id;
private int Money;
}```
如果我每次需要初始化的參數(shù)不一樣,比如:
1.我只初始化Name胸私。
2.我要初始化Name,Age厌处。
3.我要初始化Name,Money。
4....
這個(gè)時(shí)候盖文,如果為每一種情況都編寫(xiě)構(gòu)造函數(shù)嘱蛋,就太繁瑣了。
這個(gè)時(shí)候五续,我們可以考慮使用建造者模式來(lái)處理洒敏。
Person person = (new Person.Builder("Andy")).Id("12345").build();
在我們創(chuàng)建一個(gè)新的成員的時(shí)候,我們需要的參數(shù)疙驾,直接用點(diǎn)號(hào)+成員名稱來(lái)初始化凶伙。沒(méi)有這樣顯式初始化的參數(shù)則使用默認(rèn)的初始化值來(lái)定義。
建造者模式的具體代碼如下:
public class Person {
private String Name;
private int Age;
private String Id;
private String Money;
public static class Builder {
private final String Name;
private int Age = 18;
private String Id = "3150110";
private String Money = "2000";
public Builder(String Name) {
this.Name = Name;
}
public Builder Age(int Age) {
this.Age = Age;
return this;
}
public Builder Id(String Id) {
this.Id = Id;
return this;
}
public Builder Money(String Money) {
this.Money = Money;
return this;
}
public Person build() {
return new Person(this);
}
}
private Person(Builder builder) {
Name = builder.Name;
Age = builder.Age;
Id = builder.Id;
Money = builder.Money;
}
}
這個(gè)時(shí)候它碎,我們可以通過(guò)
這種實(shí)現(xiàn)模式函荣,也是對(duì)內(nèi)部靜態(tài)類使用的一個(gè)典型場(chǎng)景。