将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
理解建造者模式:通过分步骤构建,将复杂对象创建过程与表示分离
掌握 Director 控制构建步骤,Builder 子类决定具体产品类型的结构
理解同一个构建流程可以产生不同表示(Car vs. Manual)
了解建造者与抽象工厂的区别,以及各自适用场景
director 编排构建步骤,具体 builder 负责创建和返回复杂产品
/** 建造者接口:定义构建复杂对象的各个步骤 */
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 定义高层构建顺序(如 constructSportsCar),客户端通过 Director 而非直接操作 Builder。
CarBuilder 产出 Car,ManualBuilder 实现同一 Builder 接口产出 Manual,Director 复用同一流程。
抽象工厂产出产品族,建造者分步构建单一复杂对象;建造者更擅长构造有多种可选参数的对象(如 StringBuilder/Lombok @Builder)。