建造者模式是將多個(gè)零件集中起來創(chuàng)建復(fù)雜對(duì)象挨措,所謂復(fù)雜對(duì)象就是指某個(gè)類具有多個(gè)不同的屬性
一 汗洒、建造者模式的寫法
public class Computer {
private String name;
private String CPU;
private String GPU;
public Computer() {
}
public void setName(String name) {
this.name = name;
}
public void setCPU(String CPU) {
this.CPU = CPU;
}
public void setGPU(String GPU) {
this.GPU = GPU;
}
public static class Builder {
private Computer computer;
private String name;
private String CPU;
private String GPU;
public Builder(){
computer = new Computer()
}
public Builder setName(String name) {
computer.setName(name);
return this;
}
public Builder setCPU(String CPU) {
computer.setCPU(CPU);
return this;
}
public Builder setGPU(String GPU) {
computer.setGPU(GPU);
return this;
}
public Computer build() {
return computer;
}
}
}
使用
Computer computer = new Computer.Builder() .setCPU("AMD") .setGPU("英偉達(dá)") .setName("聯(lián)想") .build();
二 议纯、一般的寫法
public class Computer {
private String name;
private String CPU;
private String GPU;
public Computer() {
}
public void setName(String name) {
this.name = name;
}
public void setCPU(String CPU) {
this.CPU = CPU;
}
public void setGPU(String GPU) {
this.GPU = GPU;
}
使用
Computer computer = new Computer() computer.setCPU("AMD") computer.setGPU("英偉達(dá)") computer.setName("聯(lián)想");
三、對(duì)比
你可能會(huì)說第二種方法寫法上不是更簡(jiǎn)便嗎溢谤,其實(shí)這也是我當(dāng)初的疑問坏逢,下面我們來看一下建造者模式的優(yōu)缺點(diǎn)耿币。
優(yōu)點(diǎn)
1. 將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同的方法中,使得創(chuàng)建過程更加清晰,使得我們能夠更加精確的控制復(fù)雜對(duì)象的產(chǎn)生過程彤断。
2. 將產(chǎn)品的創(chuàng)建過程與產(chǎn)品本身分離開來恰聘,可以使用相同的創(chuàng)建過程來得到不同的產(chǎn)品暮蹂。也就說細(xì)節(jié)依賴抽象粹断。
3. 每一個(gè)具體建造者都相對(duì)獨(dú)立,而與其他的具體建造者無關(guān),因此可以很方便地替換具體建造者或增加新的具體建造者炕吸,用戶使用不同的具體建造者即可得到不同的產(chǎn)品對(duì)象伐憾。
缺點(diǎn)
1. 建造者模式所創(chuàng)建的產(chǎn)品一般具有較多的共同點(diǎn),其組成部分相似赫模,如果產(chǎn)品之間的差異性很大树肃,則不適合使用建造者模式,因此其使用范圍受到一定的限制瀑罗。
2. 如果產(chǎn)品的內(nèi)部變化復(fù)雜胸嘴,可能會(huì)導(dǎo)致需要定義很多具體建造者類來實(shí)現(xiàn)這種變化,導(dǎo)致系統(tǒng)變得很龐大斩祭。
四劣像、總結(jié)
總之,建造者模式是將復(fù)雜對(duì)象的創(chuàng)建和對(duì)象創(chuàng)建的過程分離開摧玫,這樣使得代碼的邏輯清晰耳奕,鮮明易懂。