建造者模式是一种创建型设计模式,旨在通过简化复杂对象的构建过程来创建对象。它允许您按步骤构建对象,同时隐藏了创建细节。该模式通常适用于需要创建具有大量配置选项或参数的对象的情况。
以下是建造者模式的一般结构和关键参与者:
产品(Product):要构建的复杂对象。
建造者接口(Builder Interface):定义了构建产品所需的方法。
具体建造者(Concrete Builder):实现了建造者接口,负责构建产品的具体部件,并提供了访问产品的方法。
指导者(Director):负责使用建造者接口来构建产品。指导者知道建造者应如何构建产品。
客户端(Client):通过指导者构建产品。

下面是一个简单的Java示例,演示了如何使用建造者模式来构建一辆汽车:
- // 产品
- class Car {
- private String make;
- private String model;
- private int year;
-
- public Car(String make, String model, int year) {
- this.make = make;
- this.model = model;
- this.year = year;
- }
-
- // Getters
- public String getMake() { return make; }
- public String getModel() { return model; }
- public int getYear() { return year; }
- }
-
- // 建造者接口
- interface CarBuilder {
- CarBuilder setMake(String make);
- CarBuilder setModel(String model);
- CarBuilder setYear(int year);
- Car build();
- }
-
- // 具体建造者
- class CarBuilderImpl implements CarBuilder {
- private Car car;
-
- public CarBuilderImpl() {
- this.car = new Car("", "", 0);
- }
-
- @Override
- public CarBuilder setMake(String make) {
- car.make = make;
- return this;
- }
-
- @Override
- public CarBuilder setModel(String model) {
- car.model = model;
- return this;
- }
-
- @Override
- public CarBuilder setYear(int year) {
- car.year = year;
- return this;
- }
-
- @Override
- public Car build() {
- return car;
- }
- }
-
- // 指导者
- class CarDirector {
- private CarBuilder builder;
-
- public CarDirector(CarBuilder builder) {
- this.builder = builder;
- }
-
- public Car construct(String make, String model, int year) {
- return builder.setMake(make)
- .setModel(model)
- .setYear(year)
- .build();
- }
- }
-
- // 客户端
- public class BuilderPatternExample {
- public static void main(String[] args) {
- CarBuilder builder = new CarBuilderImpl();
- CarDirector director = new CarDirector(builder);
-
- Car car = director.construct("Toyota", "Camry", 2022);
- System.out.println("Car: " + car.getMake() + " " + car.getModel() + " " + car.getYear());
- }
- }
这个示例展示了一个简单的汽车建造者模式。在这个示例中,CarBuilder负责构建汽车对象的具体部分,而CarDirector负责指导建造者如何构建汽车对象。
建造者模式适用于以下情况:
1. 对象的构造过程比较复杂,涉及多个步骤或者需要组合多个部件来构建对象。
2. 对象具有多个配置选项,但客户端并不需要知道所有配置选项的细节,只需提供必要的配置即可。
3. 需要构建不同表示或配置的对象,但构建过程相同或类似。举例来说,以下是一些常见的适用场景:
1. **构建复杂的产品**:当产品的构建过程比较复杂,包括多个步骤或者需要按顺序执行一系列的操作来构建产品时,建造者模式可以将构建过程模块化,使得代码更易于维护和扩展。
2. **对象拥有大量配置选项**:当对象具有许多配置选项,但客户端只需提供部分配置信息时,可以使用建造者模式。客户端只需调用建造者的相应方法来设置所需的配置,而不需要了解所有配置选项的细节。
3. **创建不同表示的对象**:有时候,需要根据不同的需求创建不同表示或配置的对象,但构建过程是相同或类似的。在这种情况下,可以使用相同的建造者接口和构建过程来构建不同的对象。
总之,建造者模式适用于构建过程比较复杂,需要隐藏构建细节,同时允许客户端根据需要定制对象的情况。