建造者模式(Builder Pattern)是一种创建对象的设计模式,它将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。以下是一些建造者模式的应用场景:
- 当创建一个复杂对象的过程需要多个步骤,并且这些步骤的顺序或参数可能不同时,可以使用建造者模式。
- 当需要创建的对象具有多个可选的配置参数,并且这些参数的组合可能很多时,使用建造者模式可以更清晰地管理对象的创建过程。
- 当需要创建的对象的内部结构比较复杂,并且需要逐步构建时,建造者模式可以提供更好的封装性和可维护性。
以下是一个使用建造者模式创建汽车对象的 Java 代码示例:
// 产品类:汽车
class Car {
private String brand;
private String model;
private String color;
private int maxSpeed;
// 省略构造函数、getter 和 setter 方法
@Override
public String toString() {
return "Car{" +
"brand='" + brand + '\'' +
", model='" + model + '\'' +
", color='" + color + '\'' +
", maxSpeed=" + maxSpeed +
'}';
}
}
// 抽象建造者
abstract class CarBuilder {
protected Car car = new Car();
public abstract void buildBrand();
public abstract void buildModel();
public abstract void buildColor();
public abstract void buildMaxSpeed();
public Car getCar() {
return car;
}
}
// 具体建造者:豪华车建造者
class LuxuryCarBuilder extends CarBuilder {
@Override
public void buildBrand() {
car.setBrand("奔驰");
}
@Override
public void buildModel() {
car.setModel("S级");
}
@Override
public void buildColor() {
car.setColor("黑色");
}
@Override
public void buildMaxSpeed() {
car.setMaxSpeed(250);
}
}
// 具体建造者:经济型车建造者
class EconomyCarBuilder extends CarBuilder {
@Override
public void buildBrand() {
car.setBrand("丰田");
}
@Override
public void buildModel() {
car.setModel("卡罗拉");
}
@Override
public void buildColor() {
car.setColor("白色");
}
@Override
public void buildMaxSpeed() {
car.setMaxSpeed(180);
}
}
// 导演类
class CarDirector {
public Car constructCar(CarBuilder builder) {
builder.buildBrand();
builder.buildModel();
builder.buildColor();
builder.buildMaxSpeed();
return builder.getCar();
}
}
public class BuilderPatternExample {
public static void main(String[] args) {
// 创建导演类对象
CarDirector director = new CarDirector();
// 创建豪华车建造者对象
LuxuryCarBuilder luxuryCarBuilder = new LuxuryCarBuilder();
// 导演指挥建造豪华车
Car luxuryCar = director.constructCar(luxuryCarBuilder);
System.out.println("豪华车: " + luxuryCar);
// 创建经济型车建造者对象
EconomyCarBuilder economyCarBuilder = new EconomyCarBuilder();
// 导演指挥建造经济型车
Car economyCar = director.constructCar(economyCarBuilder);
System.out.println("经济型车: " + economyCar);
}
}
在上述代码中,我们定义了一个Car
类表示汽车产品,它具有品牌、型号、颜色和最高速度等属性。然后,我们定义了一个抽象建造者CarBuilder
,它定义了构建汽车的各个部分的抽象方法。接着,我们定义了两个具体建造者LuxuryCarBuilder
和EconomyCarBuilder
,它们分别实现了构建豪华车和经济型车的具体逻辑。最后,我们定义了一个导演类CarDirector
,它负责指挥建造者按照一定的顺序构建汽车。在main
方法中,我们创建了导演类对象,并分别使用豪华车建造者和经济型车建造者来构建汽车,并输出构建的结果。