跳到主要内容

建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它允许你创建一个复杂对象的表示,同时隐藏了构建的细节。它将构建过程与最终表示分离,使得相同的构建过程可以创建不同的表示。

建造者模式通常包含以下角色:

  1. 产品(Product): 表示被构建的复杂对象。具体的构建过程会创建不同的产品实例。

  2. 抽象建造者(Builder): 定义了构建产品的接口,包括构建每个部分的方法。

  3. 具体建造者(Concrete Builder): 实现了抽象建造者接口,负责实际构建产品的每个部分。具体建造者通常有一个与产品相关的实例,并将其组装成最终产品。

  4. 指导者(Director): 负责调用具体建造者来构建产品。指导者通常不直接创建产品,而是通过调用建造者的方法来实现。

以下是一个简单的 JavaScript 示例,演示了建造者模式:

// 产品
class Car {
constructor() {
this.parts = [];
}

addPart(part) {
this.parts.push(part);
}

showInfo() {
console.log(`Car Parts: ${this.parts.join(', ')}`);
}
}

// 抽象建造者
class Builder {
buildPart1() {}
buildPart2() {}
buildPart3() {}
getResult() {}
}

// 具体建造者A
class ConcreteBuilderA extends Builder {
constructor() {
super();
this.car = new Car();
}

buildPart1() {
this.car.addPart('PartA1');
}

buildPart2() {
this.car.addPart('PartA2');
}

getResult() {
return this.car;
}
}

// 具体建造者B
class ConcreteBuilderB extends Builder {
constructor() {
super();
this.car = new Car();
}

buildPart1() {
this.car.addPart('PartB1');
}

buildPart3() {
this.car.addPart('PartB3');
}

getResult() {
return this.car;
}
}

// 指导者
class Director {
construct(builder) {
builder.buildPart1();
builder.buildPart2();
builder.buildPart3();
return builder.getResult();
}
}

// 客户端代码
const director = new Director();

const builderA = new ConcreteBuilderA();
const productA = director.construct(builderA);
productA.showInfo();
// Output: Car Parts: PartA1, PartA2

const builderB = new ConcreteBuilderB();
const productB = director.construct(builderB);
productB.showInfo();
// Output: Car Parts: PartB1, PartB3

在这个例子中,Car 是产品,Builder 是抽象建造者,ConcreteBuilderAConcreteBuilderB 是具体建造者,Director 是指导者。Director 负责指导具体建造者来构建产品。每个具体建造者负责实现产品的构建过程,并通过 getResult 方法返回最终的产品。

建造者模式的优点包括:

  • 隔离构建过程和最终表示: 客户端只需关心最终产品的表示,而不需要了解构建的细节。
  • 灵活性: 可以通过不同的具体建造者来创建不同的产品表示。
  • 复用性: 可以复用相同的构建过程来构建不同的产品。

建造者模式在需要构建复杂对象,且构建过程有一定步骤和顺序的场景中非常有用。