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

Java 設計模式:建造者模式(Builder Pattern)構建複雜對象

     編輯:Java 相關知識

什麼是建造者模式?

建造者模式屬於創建型模式,將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。適用於「對象包含多個組成部分、構建步驟復雜、需靈活組合」的場景。

核心角色

  • Product(產品):最終生成的複雜對象(如 Car)。
  • Builder(抽象建造者):定義構建各部件的介面(buildEngine(), buildWheels()...)及獲取產品方法。
  • ConcreteBuilder(具體建造者):實現部件構建邏輯,組裝產品。
  • Director(指揮者):定義構建步驟順序,調用 Builder 方法構建產品,將「構建過程」與「部件實現」解耦。

代碼實戰:組裝汽車

// 1. 產品
class Car {
    private Engine engine;
    private List wheels;
    private String color;
    // getter/setter/toString...
}

// 2. 抽象建造者
interface CarBuilder {
    void buildEngine();
    void buildWheels();
    void buildColor();
    Car getResult();
}

// 3. 具體建造者:運動型轎車
class SportsCarBuilder implements CarBuilder {
    private Car car = new Car();
    public void buildEngine() { car.setEngine(new V8Engine()); }
    public void buildWheels() { car.setWheels(Arrays.asList(new SportWheel(), ...)); }
    public void buildColor() { car.setColor("Red"); }
    public Car getResult() { return car; }
}

// 4. 指揮者:定義組裝流程
class CarDirector {
    private CarBuilder builder;
    public CarDirector(CarBuilder b) { this.builder = b; }
    public void construct() {
        builder.buildEngine();
        builder.buildWheels();
        builder.buildColor();
    }
}

// 5. 客戶端
CarBuilder builder = new SportsCarBuilder();
CarDirector director = new CarDirector(builder);
director.construct();
Car myCar = builder.getResult();

與抽象工廠的區別

  • 抽象工廠:關注「產品族」的創建,一次創建一組相關產品,無順序依賴。
  • 建造者:關注「單一複雜產品」的分步構建,強調構建順序與細節控制。

實戰變體:鏈式調用(Fluent Builder)

現代 Java 常用靜態內部類 + 鏈式調用,無需 Director:

public class User {
    private final String name;
    private final int age;
    private final String email;

    private User(Builder b) { this.name = b.name; this.age = b.age; this.email = b.email; }

    public static class Builder {
        private String name; private int age; private String email;
        public Builder name(String n) { this.name = n; return this; }
        public Builder age(int a) { this.age = a; return this; }
        public Builder email(String e) { this.email = e; return this; }
        public User build() { return new User(this); }
    }
}
// 使用
User u = new User.Builder().name("Tom").age(25).email("tom@test.com").build();

應用場景

  • 對象構建涉及多步驟、多條件(如 HTTP 請求構建、SQL 查詢構建)。
  • 需要創建不可變對象(所有字段 final,構建後不可修改)。
  • 連接池、線程池等資源池的「斷肢修復」:Director 診斷損壞部件,Builder 重建該部件。

核心價值

建造者模式將「什麼時候構建什麼部件」(Director)與「如何構建部件」(Builder)分離,讓複雜對象的創建過程可控、可擴展、可復用。

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