描述:对象的构建与表示分离,同样的构建过程创建不同的表示
优点:解耦对象和它的构建过程,建造者独立,容易扩展
缺点:需要对象有较多的共同点,对象内部变化导致建造者变多
应用:指定属性构建对象,组装小对象,组成大对象
classDiagram
class Product{
+doSomething() void
}
class Builder{
<>
+buildPartA()* void
+buildPartB()* void
+buildProduct()* Product
}
class ConcreteBuilder{
-product Product
constructor(product : Product)
+buildPartA() void
+buildPartB() void
+buildProduct() Product
}
class Director{
-_builder : Builder
constructor(builder : Builder)
setbuilder(builder : Builder)
+constructorProduct()
}
Director o-- Builder :聚合
Builder <|.. ConcreteBuilder :实现
Product <.. ConcreteBuilder :依赖
- 对建造者抽象,指定需要抽象出哪些产品
- 指挥者,处理建造的流程
- 实例化一个建造者,交给指挥者,指挥者的实例进行构建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| class Product { public doSomething() : void { } }
abstract class Builder { public abstract buildPartA() : void; public abstract buildPartB() : void; public abstract buildPartC() : void; public abstract buildProduct() : Product; }
class ConcreteBuilder extends Builder { private product : Product; constructor(product : Product) { super(); this.product = product; } public buildPartA() : void {} public buildPartB() : void {} public buildPartC() : void {} public buildProduct() : Product { return this.product; } }
class Director { private _builder : Builder; constructor(builder : Builder) { this._builder = builder; } set builder(builder : Builder) { this._builder = builder; } public constructorProduct() { this._builder.buildPartA(); this._builder.buildPartB(); this._builder.buildPartC(); return this._builder.buildProduct(); } }
const builder : Builder = new ConcreteBuilder(new Product()); const director : Director = new Director(builder); const product : Product = director.constructorProduct();
|