首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 建造者模式詳解:分步構建複雜對象,導演者與建造者分離

     編輯:Java 相關知識

模式動機

當對象構建過程**復雜**、**步驟固定但細節可變**、或需**多種表示**時,將構建邏輯從業務代碼中分離。

角色結構

  • Product:最終產品 (如 Computer)
  • Builder (抽象建造者):聲明構建步驟 buildCpu(), buildRam()... 及 getResult()
  • ConcreteBuilder:具體實現步驟,維護半成品狀態
  • Director (導演者):**掌握構建算法/順序**,調用 Builder 步驟,屏蔽客戶端細節

代碼實現


// 產品
class Computer {
    String cpu, ram, storage, gpu;
    @Override public String toString() {
        return "Computer{cpu=" + cpu + ", ram=" + ram + ", storage=" + storage + ", gpu=" + gpu + "}";
    }
}

// 抽象建造者
interface Builder {
    void buildCpu();
    void buildRam();
    void buildStorage();
    void buildGpu();
    Computer getResult();
}

// 具體建造者:高端電腦
class HighEndBuilder implements Builder {
    private Computer c = new Computer();
    public void buildCpu() { c.cpu = "i9-13900K"; }
    public void buildRam() { c.ram = "64GB DDR5"; }
    public void buildStorage() { c.storage = "2TB NVMe"; }
    public void buildGpu() { c.gpu = "RTX 4090"; }
    public Computer getResult() { return c; }
}

// 導演者
class Director {
    private Builder builder;
    public Director(Builder builder) { this.builder = builder; }
    public void construct() {
        builder.buildCpu();
        builder.buildRam();
        builder.buildStorage();
        builder.buildGpu();
    }
}

// 客戶端
public class BuilderDemo {
    public static void main(String[] args) {
        Builder builder = new HighEndBuilder();
        Director director = new Director(builder);
        director.construct();
        Computer pc = builder.getResult();
        System.out.println(pc);
    }
}

與工廠模式區別

維度工廠模式建造者模式
關注點創建**單個**對象構建**復雜**對象的**過程**
步驟一次性完成分步驟、可定制順序
導演者無有 (封裝構建算法)
適用性構建簡單、參數少構建複雜、可選部件多、順序敏感

實戰應用

  • StringBuilder / StringBuffer (內部建造者)
  • JavaMail MimeMessage 構建
  • HTTP 請求構建器 (OkHttp Request.Builder)
  • MyBatis SqlSessionFactoryBuilder

現代寫法:鏈式調用 + Lambda (無導演者)


Computer pc = new Computer.Builder()
    .cpu("i7-13700K")
    .ram("32GB")
    .storage("1TB")
    .gpu("RTX 4070")
    .build();

此為 **Builder 模式變體**,省去 Director,適合步驟固定、可選參數多的場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved