建造者模式(Builder Pattern)是一种设计模式,属于创建型模式。它的主要目的是将一个复杂对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。换句话说,建造者模式允许你一步步构建一个复杂的对象,同时避免构造过程中的各种冗杂细节。
当需要创建一个复杂对象时(对象内部有很多属性需要设定),而你又不希望通过构造函数传递大量的参数,或者通过不同的构造函数变种来创建时,建造者模式非常适用。它有助于提升代码的可读性和可维护性。
建造者模式通常包括以下几个角色:
+------------+
| Director |-------------------+
+------------+ |
| |
v v
+------------+ +-------------------+
| Builder |<----------| ConcreteBuilder |
+------------+ +-------------------+
| |
v v
+-------------------+ +-----------------+
| Product | | Product |
+-------------------+ +-----------------+假设我们要构建一辆复杂的车,每辆车可能有不同的属性,比如车轮、车门、引擎等。我们可以使用建造者模式来构建这辆车。
// 产品类:车
class Car {
private String engine;
private String wheels;
private String doors;
public void setEngine(String engine) {
this.engine = engine;
}
public void setWheels(String wheels) {
this.wheels = wheels;
}
public void setDoors(String doors) {
this.doors = doors;
}
@Override
public String toString() {
return "Car [engine=" + engine + ", wheels=" + wheels + ", doors=" + doors + "]";
}
}
// 建造者接口
interface CarBuilder {
void buildEngine();
void buildWheels();
void buildDoors();
Car getCar();
}
// 具体建造者1:Tesla车
class TeslaCarBuilder implements CarBuilder {
private Car car;
public TeslaCarBuilder() {
this.car = new Car();
}
@Override
public void buildEngine() {
car.setEngine("Electric Engine");
}
@Override
public void buildWheels() {
car.setWheels("Tesla Wheels");
}
@Override
public void buildDoors() {
car.setDoors("4 Doors");
}
@Override
public Car getCar() {
return car;
}
}
// 具体建造者2:BMW车
class BMWCarBuilder implements CarBuilder {
private Car car;
public BMWCarBuilder() {
this.car = new Car();
}
@Override
public void buildEngine() {
car.setEngine("V6 Engine");
}
@Override
public void buildWheels() {
car.setWheels("BMW Wheels");
}
@Override
public void buildDoors() {
car.setDoors("4 Doors");
}
@Override
public Car getCar() {
return car;
}
}
// 指挥者:构建过程
class Director {
private CarBuilder builder;
public Director(CarBuilder builder) {
this.builder = builder;
}
public void construct() {
builder.buildEngine();
builder.buildWheels();
builder.buildDoors();
}
public Car getCar() {
return builder.getCar();
}
}
// 客户端
public class Main {
public static void main(String[] args) {
CarBuilder teslaBuilder = new TeslaCarBuilder();
Director director = new Director(teslaBuilder);
director.construct();
Car tesla = director.getCar();
System.out.println(tesla);
CarBuilder bmwBuilder = new BMWCarBuilder();
director = new Director(bmwBuilder);
director.construct();
Car bmw = director.getCar();
System.out.println(bmw);
}
}5. 运行结果:
Car [engine=Electric Engine, wheels=Tesla Wheels, doors=4 Doors]
Car [engine=V6 Engine, wheels=BMW Wheels, doors=4 Doors]建造者模式尤其适用于构建层次复杂、参数众多的对象时,避免了大量的构造函数重载,能够提高代码的可读性和维护性。
如果您有任何问题或建议,欢迎留言讨论。