课程大纲 / Lesson 04
Builder 创建型

Builder · 建造者

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

01

理解建造者模式:通过分步骤构建,将复杂对象创建过程与表示分离

02

掌握 Director 控制构建步骤,Builder 子类决定具体产品类型的结构

03

理解同一个构建流程可以产生不同表示(Car vs. Manual)

04

了解建造者与抽象工厂的区别,以及各自适用场景

核心概念
分步骤构建复杂对象Director 控制构建流程同一流程不同表示Builder 接口抽象
classDiagram class builder { <<interface>> +reset() +setseats(n int) +setengine(engine string) +settripcomputer() +setgps() +getresult() car } class carbuilder { -car car +reset() +setseats(n int) +setengine(engine string) +settripcomputer() +setgps() +getresult() car } class director { <<stateless>> +constructsportscar(builder builder) +constructsuv(builder builder) } class car { +seats int +engine string +tripcomputer boolean +gps boolean +tostring() string } builder <|.. carbuilder director ..> builder carbuilder --> car : builds

director 编排构建步骤,具体 builder 负责创建和返回复杂产品

点击 Run 查看汽车构建过程...
/** 建造者接口:定义构建复杂对象的各个步骤 */
public interface Builder {
    void reset();
    void setSeats(int n);
    void setEngine(String engine);
    void setTripComputer();
    void setGPS();
    Car getResult();
}
/** 具体建造者:负责构建 Car 对象 */
public class CarBuilder implements Builder {
    private Car car;

    public void reset() {
        car = new Car();
    }

    public void setSeats(int n) { car.seats = n; }

    public void setEngine(String e) { car.engine = e; }

    public void setTripComputer() { car.tripComputer = true; }

    public void setGPS() { car.gps = true; }

    public Car getResult() { return car; }
}
/** 导演者:控制构建步骤顺序,对客户端隐藏构建细节 */
public class Director {

    /** 构建运动款汽车:2座、运动引擎、含车载电脑和GPS */
    public void constructSportsCar(Builder builder) {
        builder.reset();
        builder.setSeats(2);
        builder.setEngine("Sport Engine");
        builder.setTripComputer();
        builder.setGPS();
    }

    /** 构建 SUV:7座、柴油引擎 */
    public void constructSUV(Builder builder) {
        builder.reset();
        builder.setSeats(7);
        builder.setEngine("Diesel Engine");
        builder.setGPS();
    }
}
/** 复杂产品:汽车 */
public class Car {
    public int seats;
    public String engine;
    public boolean tripComputer;
    public boolean gps;

    public String toString() {
        return "Car{seats=" + seats + ", engine=" + engine
            + ", tripComputer=" + tripComputer + ", gps=" + gps + "}";
    }
}
public class Demo {
    public static void main(String[] args) {
        Director director = new Director();
        CarBuilder builder = new CarBuilder();
        director.constructSportsCar(builder);
        Car car = builder.getResult();
        System.out.println(car.toString());
    }
}
◈

分步骤构建复杂对象

Builder 将对象构建的各个步骤抽象为独立方法,支持中途暂停、参数校验、逐步构建。

◈

Director 控制构建流程

Director 定义高层构建顺序(如 constructSportsCar),客户端通过 Director 而非直接操作 Builder。

◈

同一流程,不同表示

CarBuilder 产出 Car,ManualBuilder 实现同一 Builder 接口产出 Manual,Director 复用同一流程。

◈

建造者 vs. 抽象工厂

抽象工厂产出产品族,建造者分步构建单一复杂对象;建造者更擅长构造有多种可选参数的对象(如 StringBuilder/Lombok @Builder)。