建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。当一个对象需要多个部分或许多步骤来创建,并且需要将创建过程与表示分离时,建造者模式非常有用。建造者模式旨在找到一个解决方案,以避免构造函数参数列表的膨胀,尤其是当对象的构造过程很复杂时。
以下是一个使用 Java 实现建造者模式的示例:
步骤1:定义产品类
1// 产品类,具有多个部分构成
2public class Car {
3 private String engine;
4 private String wheels;
5 private String GPS;
6
7 // 省略其他部分以及构造器、getter 和 setter 方法
8}
步骤2:定义建造者接口
1// 建造者接口声明了创建产品对象各个部分的方法
2public interface CarBuilder {
3 CarBuilder buildEngine(String engine);
4 CarBuilder buildWheels(String wheels);
5 CarBuilder buildGPS(String gps);
6 Car build();
7}
步骤3:实现具体的建造者
1// 具体的建造者实现了建造者接口并定义了创建产品的逻辑
2public class ConcreteCarBuilder implements CarBuilder {
3 private Car car;
4
5 public ConcreteCarBuilder() {
6 car = new Car();
7 }
8
9 @Override
10 public CarBuilder buildEngine(String engine) {
11 car.setEngine(engine);
12 return this;
13 }
14
15 @Override
16 public CarBuilder buildWheels(String wheels) {
17 car.setWheels(wheels);
18 return this;
19 }
20
21 @Override
22 public CarBuilder buildGPS(String gps) {
23 car.setGPS(gps);
24 return this;
25 }
26
27 @Override
28 public Car build() {
29 return car;
30 }
31}
步骤4:定义指挥者类(可选)
1// 指挥者类负责定义创建产品的顺序
2public class Director {
3 public Car constructSportsCar(CarBuilder builder) {
4 return builder.buildEngine("SportsEngine")
5 .buildWheels("SportsWheels")
6 .buildGPS("SportsGPS")
7 .build();
8 }
9
10 // 可以定义其他构建逻辑
11}
步骤5:客户端代码
1public class Client {
2 public static void main(String[] args) {
3 ConcreteCarBuilder builder = new ConcreteCarBuilder();
4 Director director = new Director();
5
6 // 使用指挥者来构建产品
7 Car sportsCar = director.constructSportsCar(builder);
8
9 // 直接使用建造者来构建产品
10 Car car = builder.buildEngine("V8")
11 .buildWheels("Alloy")
12 .buildGPS("SatNav")
13 .build();
14
15 // 输出构建的汽车信息
16 System.out.println(sportsCar);
17 System.out.println(car);
18 }
19}
在此实践例子中,ConcreteCarBuilder 是具体的建造者,其实现了 CarBuilder 接口,以提供创建 Car 对象的方法。Director 类通过调用建造者的方法以特定的顺序创建产品,这有助于封装复杂对象的构建过程。最后,客户端代码可以使用建造者模式来创建不同配置的 Car 对象,而不必担心构建过程中的细节。
建造者模式允许客户端代码逐步构建复杂对象,并且可以在不改变建造者或指挥者代码的情况下制作不同表示。此模式还提供了链式调用,可以使客户端代码更加清晰。此外,由于有了 ConcreteCarBuilder,新增不同的汽车类型也变得简单,只需实现不同的建造者即可。