手機(jī)怎么樣自己做網(wǎng)站網(wǎng)站優(yōu)化公司開始上班了
設(shè)計(jì)模式 4:建造者模式
定義與目的
- 定義:建造者模式將一個(gè)復(fù)雜對(duì)象的
構(gòu)建
與其表示
分離,使得同樣的構(gòu)建過程
可以創(chuàng)建不同的表示
。 - 目的:該模式主要用于創(chuàng)建復(fù)雜對(duì)象時(shí),這些對(duì)象的創(chuàng)建過程可能涉及多個(gè)步驟,并且可能需要不同的配置選項(xiàng)。建造者模式將
構(gòu)建過程
與表示
分離,使得可以構(gòu)建出不同配置的同一類型對(duì)象。
實(shí)現(xiàn)示例
假設(shè)我們要?jiǎng)?chuàng)建一個(gè)計(jì)算機(jī)對(duì)象,這個(gè)對(duì)象有很多配置選項(xiàng),比如處理器、內(nèi)存、硬盤等。我們可以使用建造者模式來創(chuàng)建不同配置的計(jì)算機(jī)實(shí)例。
// 定義產(chǎn)品類 - 計(jì)算機(jī)
public class Computer {// 計(jì)算機(jī)的處理器型號(hào)private String processor;// 計(jì)算機(jī)的內(nèi)存大小(單位:GB)private int ram;// 計(jì)算機(jī)的硬盤大小(單位:GB)private int hardDrive;// 私有構(gòu)造函數(shù),僅允許通過 Builder 創(chuàng)建 Computer 實(shí)例// 參數(shù) builder 用于從 Builder 類中獲取處理器、內(nèi)存和硬盤的信息private Computer(Builder builder) {this.processor = builder.processor;this.ram = builder.ram;this.hardDrive = builder.hardDrive;}// Builder 類,用于構(gòu)建 Computer 實(shí)例public static class Builder {// 計(jì)算機(jī)的處理器型號(hào)private String processor;// 計(jì)算機(jī)的內(nèi)存大小(單位:GB)private int ram;// 計(jì)算機(jī)的硬盤大小(單位:GB)private int hardDrive;// 設(shè)置處理器型號(hào)// 參數(shù) processor 為處理器型號(hào)// 返回當(dāng)前 Builder 實(shí)例,以便可以繼續(xù)鏈?zhǔn)秸{(diào)用其他方法public Builder processor(String processor) {this.processor = processor;return this;}// 設(shè)置內(nèi)存大小// 參數(shù) ram 為內(nèi)存大小(單位:GB)// 返回當(dāng)前 Builder 實(shí)例,以便可以繼續(xù)鏈?zhǔn)秸{(diào)用其他方法public Builder ram(int ram) {this.ram = ram;return this;}// 設(shè)置硬盤大小// 參數(shù) hardDrive 為硬盤大小(單位:GB)// 返回當(dāng)前 Builder 實(shí)例,以便可以繼續(xù)鏈?zhǔn)秸{(diào)用其他方法public Builder hardDrive(int hardDrive) {this.hardDrive = hardDrive;return this;}// 構(gòu)建 Computer 實(shí)例// 返回使用當(dāng)前 Builder 實(shí)例創(chuàng)建的 Computer 實(shí)例public Computer build() {return new Computer(this);}}// Getter 方法,用于獲取處理器型號(hào)public String getProcessor() {return processor;}// Getter 方法,用于獲取內(nèi)存大小public int getRam() {return ram;}// Getter 方法,用于獲取硬盤大小public int getHardDrive() {return hardDrive;}// 重寫 toString 方法,用于格式化輸出 Computer 實(shí)例的信息@Overridepublic String toString() {return "Computer{" +"processor='" + processor + '\'' +", ram=" + ram +", hardDrive=" + hardDrive +'}';}
}// 客戶端代碼
public class Client {public static void main(String[] args) {// 創(chuàng)建一臺(tái)配置較高的計(jì)算機(jī)Computer computerHighEnd = new Computer.Builder().processor("i9") // 設(shè)置處理器型號(hào)為 i9.ram(32) // 設(shè)置內(nèi)存大小為 32 GB.hardDrive(1024) // 設(shè)置硬盤大小為 1024 GB.build(); // 構(gòu)建 Computer 實(shí)例// 創(chuàng)建一臺(tái)配置較低的計(jì)算機(jī)Computer computerLowEnd = new Computer.Builder().processor("i3") // 設(shè)置處理器型號(hào)為 i3.ram(4) // 設(shè)置內(nèi)存大小為 4 GB.hardDrive(128) // 設(shè)置硬盤大小為 128 GB.build(); // 構(gòu)建 Computer 實(shí)例// 輸出高配置計(jì)算機(jī)的信息System.out.println(computerHighEnd); // 輸出: Computer{processor='i9', ram=32, hardDrive=1024}// 輸出低配置計(jì)算機(jī)的信息System.out.println(computerLowEnd); // 輸出: Computer{processor='i3', ram=4, hardDrive=128}}
}
使用場(chǎng)景
- 當(dāng)你需要?jiǎng)?chuàng)建一個(gè)復(fù)雜對(duì)象,且該對(duì)象的構(gòu)建過程需要分步驟進(jìn)行時(shí)。
- 當(dāng)構(gòu)建對(duì)象的不同配置需要不同的步驟時(shí)。
- 當(dāng)構(gòu)建對(duì)象的步驟可能會(huì)發(fā)生變化時(shí)。
建造者模式通過將構(gòu)建過程與表示分離,使得可以在不同的情況下使用相同的構(gòu)建步驟來創(chuàng)建不同的對(duì)象配置。這對(duì)于創(chuàng)建復(fù)雜對(duì)象時(shí)非常有用,特別是在對(duì)象的構(gòu)建過程需要多個(gè)步驟的情況下。
小結(jié)
建造者模式適用于創(chuàng)建具有多個(gè)可選部分的復(fù)雜對(duì)象。它提供了一種方式來逐步構(gòu)建這些對(duì)象,同時(shí)保持代碼的簡(jiǎn)潔性和可擴(kuò)展性。