建造者模式(Builder Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,它允許通過(guò)分步驟來(lái)構(gòu)建復(fù)雜對(duì)象。該模式的核心原理是將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表現(xiàn)形式。
原理
在建造者模式中,通常有以下角色:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-794599.html
- 抽象建造者(Builder): 定義了創(chuàng)建產(chǎn)品對(duì)象的各個(gè)部分的接口,并定義了組裝產(chǎn)品的具體方法。
- 具體建造者(ConcreteBuilder): 實(shí)現(xiàn)了抽象建造者接口,構(gòu)造和裝配各個(gè)部件以創(chuàng)建最終的產(chǎn)品對(duì)象。
- 產(chǎn)品(Product): 是被構(gòu)建的復(fù)雜對(duì)象,包含多個(gè)可配置的部分。
- 導(dǎo)演者(Director,可選): 負(fù)責(zé)協(xié)調(diào)建造者的工作流程,調(diào)用建造者的相關(guān)方法來(lái)一步步完成產(chǎn)品的構(gòu)建。
Java代碼示例
// 抽象產(chǎn)品類
public abstract class Computer {
protected String motherboard;
protected String cpu;
protected String memory;
// 其他屬性和方法...
public abstract void buildMotherboard(String motherboard);
public abstract void buildCpu(String cpu);
public abstract void buildMemory(String memory);
public abstract Computer getComputer();
}
// 具體產(chǎn)品類
public class DesktopComputer extends Computer {
@Override
public void buildMotherboard(String motherboard) {
this.motherboard = motherboard;
}
@Override
public void buildCpu(String cpu) {
this.cpu = cpu;
}
@Override
public void buildMemory(String memory) {
this.memory = memory;
}
@Override
public Computer getComputer() {
return this;
}
}
// 抽象建造者類
public abstract class ComputerBuilder {
protected Computer computer;
public ComputerBuilder() {
computer = new DesktopComputer(); // 或其他實(shí)現(xiàn)類
}
public abstract void buildMotherboard();
public abstract void buildCpu();
public abstract void buildMemory();
public Computer getComputer() {
return computer;
}
}
// 具體建造者類
public class HighEndDesktopBuilder extends ComputerBuilder {
@Override
public void buildMotherboard() {
computer.buildMotherboard("High End Motherboard");
}
@Override
public void buildCpu() {
computer.buildCpu("Intel Core i9");
}
@Override
public void buildMemory() {
computer.buildMemory("64GB RAM");
}
}
// 導(dǎo)演者類(可選)
public class Director {
private ComputerBuilder builder;
public Director(ComputerBuilder builder) {
this.builder = builder;
}
public Computer constructComputer() {
builder.buildMotherboard();
builder.buildCpu();
builder.buildMemory();
return builder.getComputer();
}
}
// 使用示例
public class Client {
public static void main(String[] args) {
ComputerBuilder builder = new HighEndDesktopBuilder();
Director director = new Director(builder);
Computer highEndPC = director.constructComputer();
System.out.println(highEndPC);
}
}
想象你正在經(jīng)營(yíng)一家電腦裝配店,客戶可以選擇定制自己的臺(tái)式機(jī)。抽象建造者就像是一個(gè)裝配說(shuō)明書,列出了裝機(jī)的所有步驟;具體建造者則按照說(shuō)明書中每一步驟去實(shí)際安裝主板、CPU和內(nèi)存等配件;而導(dǎo)演者則是根據(jù)客戶的訂單要求,指揮建造者按正確的順序進(jìn)行裝配。最后得到的就是一臺(tái)完全符合客戶需求的定制化臺(tái)式電腦。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-794599.html
應(yīng)用場(chǎng)景
- 復(fù)雜對(duì)象的構(gòu)建:當(dāng)一個(gè)對(duì)象具有多個(gè)屬性,且不同屬性之間有不同的組合方式時(shí),使用建造者模式可以靈活地控制創(chuàng)建過(guò)程。
- 需要生成不同結(jié)構(gòu)或內(nèi)容的對(duì)象系列:例如創(chuàng)建XML或JSON文檔,或者創(chuàng)建不同配置選項(xiàng)的產(chǎn)品等。
- 需要解耦構(gòu)造過(guò)程與表示過(guò)程:在不暴露內(nèi)部細(xì)節(jié)的情況下,能獨(dú)立改變產(chǎn)品的內(nèi)部結(jié)構(gòu)。
適用性
- 當(dāng)一個(gè)對(duì)象的構(gòu)建過(guò)程非常復(fù)雜,需要許多步驟并且各步驟間有一定的順序關(guān)系時(shí)。
- 當(dāng)希望用戶只關(guān)注結(jié)果,而不關(guān)心構(gòu)建過(guò)程以及具體的實(shí)現(xiàn)細(xì)節(jié)時(shí)。
- 當(dāng)需要為對(duì)象的不同構(gòu)造過(guò)程提供不同的表示時(shí),即同一構(gòu)建過(guò)程可以產(chǎn)生多種不同表現(xiàn)形式的產(chǎn)品。
到了這里,關(guān)于設(shè)計(jì)模式——建造者模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!