建造者模式屬於創建型模式,將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。適用於「對象包含多個組成部分、構建步驟復雜、需靈活組合」的場景。
Car)。buildEngine(), buildWheels()...)及獲取產品方法。// 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();
現代 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();
建造者模式將「什麼時候構建什麼部件」(Director)與「如何構建部件」(Builder)分離,讓複雜對象的創建過程可控、可擴展、可復用。