建造者模式
展示如何用它创建复杂对象,同时保持创建过程的灵活性和可读性。
示例
产品类
// 定义一个复杂对象
class House {
public walls: string = '';
public roof: string = '';
public windows: string = '';
show(): void {
console.log(`House with Walls: ${this.walls}, Roof: ${this.roof}, Windows: ${this.windows}`);
}
}
建造者接口
// 定义建造者接口
interface HouseBuilder {
buildWalls(): void;
buildRoof(): void;
buildWindows(): void;
getResult(): House;
}
具体建造者
// 具体建造者实现
class ConcreteHouseBuilder implements HouseBuilder {
private house: House;
constructor() {
this.house = new House();
}
buildWalls(): void {
this.house.walls = 'Brick Walls';
}
buildRoof(): void {
this.house.roof = 'Concrete Roof';
}
buildWindows(): void {
this.house.windows = 'Glass Windows';
}
getResult(): House {
return this.house;
}
}
指挥者
// 定义指挥者类
class HouseDirector {
private builder: HouseBuilder;
constructor(builder: HouseBuilder) {
this.builder = builder;
}
construct(): void {
this.builder.buildWalls();
this.builder.buildRoof();
this.builder.buildWindows();
}
}
使用示例
function main() {
const builder = new ConcreteHouseBuilder();
const director = new HouseDirector(builder);
director.construct();
const house = builder.getResult();
house.show(); // 输出: House with Walls: Brick Walls, Roof: Concrete Roof, Windows: Glass Windows
}
main();
关键点解析
-
产品类 (
House
) :- 定义了最终要创建的复杂对象及其属性。
-
建造者接口 (
HouseBuilder
) :- 定义了构建对象各部分的方法。
-
具体建造者 (
ConcreteHouseBuilder
) :- 实现了建造者接口,负责具体的创建逻辑。
-
指挥者 (
HouseDirector
) :- 调用建造者的方法,按特定顺序构建对象。
-
分离复杂创建逻辑:
- 客户端代码通过指挥者控制对象创建,而无需关心具体实现。
应用场景
- 创建复杂对象(如车辆、房屋、游戏角色)。
- 分步构建对象,支持灵活调整或配置(如表单生成器、文档生成器)。