1.前言
使用场景
:
- 当对象内部有复杂的结构时。
- 组件有类似的结构时。
优点
:
- 建造者独立,有利于扩展。
- 功能原子化有利于细节控制。
缺点
:
- 需要组件有相似的结构,范围有限制。
- 结构复杂时,会有很多的组件类。
2.例子
<script>
/**
* 由于js中没有interface和abstract 概念
* 建造者模式只能直接使用类来进行组合
**/
//蔬菜汉堡
class VegBurger {
price() {
return 5;
}
name() {
return "VegBurger";
}
}
//鸡肉汉堡
class ChickenBurger {
price() {
return 15;
}
name() {
return "ChickenBurger";
}
}
//百世可乐
class Pepsi {
price() {
return 4;
}
name() {
return "Pepsi";
}
}
//可口可乐
class Coke {
price() {
return 4;
}
name() {
return "Coke";
}
}
//厨师
class Cooker {
constructor() {
this.foods = new Array();
}
//做食物
addFood(food) {
this.foods.push(food);
}
//计价
getCost() {
let cost = 0;
this.foods.forEach((item, index) => {
cost += item.price();
});
return cost;
}
}
class Builder{
prepareVegMeal(){
let cooker = new Cooker();
cooker.addFood(new VegBurger());
cooker.addFood(new Coke());
return cooker;
}
prepareChickenMeal(){
let cooker = new Cooker();
cooker.addFood(new ChickenBurger());
cooker.addFood(new Pepsi());
return cooker;
}
}
let builder = new Builder();
console.log(builder.prepareChickenMeal().getCost());
console.log(builder.prepareVegMeal().getCost());
</script>
3. 后记
建造者在对付并不复杂的内部结构的对象时有职责清晰、细节控制方便、易于扩展的特点,但是当复杂度到达一定的级别时就应该慎用建造者模式。此时相关类数量将会很多,增加项目的复杂度。