JavaScript 设计模式(五):建造者模式

JavaScript 设计模式(五):建造者模式
最新回答
风花雪月夜

2026-10-20 16:00:22

建造者模式(Builder Pattern)是一种创建型设计模式,它将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。与工厂模式不同,建造者模式更关注对象的创建细节和过程。

  • 核心思想:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  • 适用场景:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

在JavaScript中,建造者模式可以通过以下方式实现:

  1. 定义产品类:首先,定义一个表示复杂对象的类,这个类将包含多个部分或属性。
// 定义应聘者类var Human = function(param) { this.skill = param && param.skill || '保密'; this.hobby = param && param.hobby || '保密';};Human.prototype = { getSkill: function() { return this.skill; }, getHobby: function() { return this.hobby; }};
  1. 定义建造者类:建造者类负责逐步构建产品的各个部分。
// 定义姓名解析类var Named = function(name) { var that = this; (function(name, that) { that.wholeName = name; if (name.indexOf(' ') > -1) { that.FirstName = name.slice(0, name.indexOf(' ')); that.secondName = name.slice(name.indexOf(' ') + 1); } })(name, that);};// 定义职位类var Work = function(work) { var that = this; (function(work, that) { switch (work) { case 'code': that.work = '工程师'; that.workDescript = '每天沉醉于编程'; break; case 'UI': case 'UE': that.work = '设计师'; that.workDescript = '设计更似一种艺术'; break; case 'teach': that.work = '教师'; that.workDescript = '分享也是一种快乐'; break; default: that.work = work; that.workDescript = '对不起,我们还不清楚您所选择职位的相关描述'; } })(work, that);};Work.prototype.changeWork = function(work) { this.work = work;};Work.prototype.changeDescript = function(sentence) { this.workDescript = sentence;};
  1. 定义指挥者类:指挥者类负责使用建造者类来构建产品,它定义了构建产品的步骤。
// 定义应聘者建造类var Person = function(name, work) { var _person = new Human(); _person.name = new Named(name); _person.work = new Work(work); return _person;};
  1. 使用建造者模式创建对象:通过指挥者类来创建复杂对象。
// 测试var person = new Person('xiao ming', 'code');console.log(person.skill); // 保密console.log(person.name.FirstName); // xiaoconsole.log(person.name.secondName); // mingconsole.log(person.work.work); // 工程师console.log(person.work.workDescript); // 每天沉醉于编程person.work.changeDescript('更改描述!');console.log(person.work.workDescript); // 更改描述!

建造者模式与工厂模式的区别:

  • 工厂模式:主要关注创建对象实例或类簇,不关心创建过程,只关心最终结果。
  • 建造者模式:关注创建对象的整个过程,甚至包括创建对象的每一个细节,可以将构建过程与表示分离。

通过建造者模式,可以更灵活地控制复杂对象的创建过程,使得代码更加清晰和易于维护。