本文介绍 JavaScript 中建造者模式的实现方法。通过将复杂对象分解为简单部分并解耦构建过程,该模式便于扩展且封装性好。文章通过包工头与工人的比喻解释原理,并提供完整的 JS 代码示例,展示如何分步构建对象。
概述
建造者模式属于创建型设计模式,其结构相对简单。
核心定义在于将一个复杂对象拆解为多个简单的子对象进行构建,实现复杂构建逻辑与最终表现形式的分离,从而允许相同的构建流程生成不同的表示结果。
该模式的主要优势包括:
- 具备良好的封装性,实现了对象创建与构建过程的解耦。
- 易于扩展,当需求变更时,只需引入新的建造者即可实现功能扩展。
该模式的主要应用场景包括:
- 分步骤构建一个复杂的对象。
- 将封装过程与具体组件的创建解耦。
- 用户无需关心组件内部的具体组装细节。
使用该模式时需注意:
- 必须基于一个稳定的算法框架。
- 构建过程是暴露的,这意味着调用方可以实时监控构建进度。
通俗理解如下:
假设一位富豪想要建造房屋,他只需委托包工头,由包工头负责联系施工团队进行建设,而无需亲自寻找工人。包工头明确富豪的需求并协调工人施工,省去了富豪与工人直接沟通的成本。富豪无需了解建房的具体技术细节,只需最终验收房屋即可。
代码实现
在编写代码前,我们先对需求进行分析:
1、最终产出的对象是房子。
2、包工头负责调用工人开工,并清楚各个主要施工环节。
3、工人负责具体的施工任务,如建造卧室、客厅和厨房。
4、包工头仅作为接口存在,对外提供建房子服务,不执行具体施工操作。
function Fangzi(){
this.woshi = "";
this.keting = "";
this.chufang = "";
}
function Baogongtou(){
this.jianfangzi = function(gongren){
gongren.jian_woshi();
gongren.jian_keting();
gongren.jian_chufang();
}
}
function Gongren(){
this.jian_woshi = function(){
console.log("卧室建好了!");
}
this.jian_keting = function(){
console.log("客厅建好了!");
}
this.jian_chufang = function(){
console.log("厨房建好了!");
}
this.wangong = function(){
var fangzi = new Fangzi();
fangzi.woshi = "ok";
fangzi.keting = "ok";
fangzi.chufang = "ok";
return fangzi;
}
}
let gongren = new Gongren();
let baogongtou = new Baogongtou();
//卧室建好了!
//客厅建好了!
//厨房建好了!
baogongtou.jianfangzi(gongren);
var my_fangzi = gongren.wangong();
/*
Fangzi={
chufang: "ok"
keting: "ok"
woshi: "ok"
}
*/
console.log(my_fangzi);
在上述代码结构中,Gongren()函数内部包含具体的施工逻辑,即实际执行的操作;Fangzi()构造函数初始属性为空,未包含客厅、厨房和卧室;Baogongtou()函数仅对外声明可以建房子,通过传入工人对象并调用其方法来完成施工。当工人方法执行完毕后,即施工完成,随后进行交房操作。通过在新方法中实例化 Fangzi()并重新赋值,即可完成整个构建流程。
以上即为 JavaScript 实现建造者模式的详细内容,更多相关技术文章请查阅本站其他资源。