建造者模式

本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-12-15

建造者模式(Builder):将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示。

var Person = function(name, param, work) {
  var _person = new Human(param);

  _person.name = new Named(name);

  _person.work = new Work(work);

  _person.changeWork = function(work) {
    _person.work = new Work(work)
  }

  return _person;
}

var Human = function(param) {
  // 技能
  this.skill = param && param.skill || '保密';
  // 兴趣爱好
  this.hobby = param && param.hobby || '保密';
}

Human.prototype = {
  getSkill() {
    return this.skill;
  },
  getHobby() {
    return this.hobby;
  }
}

var Named = function(name) {
  var that = this;
  (function(name, that) {
    that.wholeName = name;
    if (name.includes(' ')) {
      const [firstName, secondName] = name.split(' ');
      this.firstName = firstName;
      this.secondName = secondName;
    }
  })(name, that);
}

var Work = function(work) {
  var that = this;
  (function(work, that) {
    switch(work) {
      case 'code':
        that.work = '工程师';
        that.workDesc = '每天沉醉于编程';
        break;
      case 'UI':
        that.work = '设计师';
        that.workDesc = '设计更是一种艺术';
        break;
      default:
        that.work = work;
        that.workDesc = '暂不清楚';
        break;
    }
  })(work, that);
}

var p = new Person('xiao ming', { skill: 'JavaScript'}, 'code');

console.log(p.skill); // JavaScript
console.log(p.hobby); // 保密
console.log(p.work.workDesc); // 每天沉醉于编程
p.changeWork('UI');
console.log(p.work.workDesc); // 设计更是一种艺术

在工厂模式中,我们更关注创建对象的结果,而在建造者模式中我们关心的是对象创建过程,通常将类模块化,这样使得创建的每一个模块都可以得到灵活的运用与高质量的复用。当然我们最终的需求是得到一个完整的个体,因此在拆分创建过程。建造者模式不仅仅可得到创建的结果,也参与了创建的过程,对于创建的具体实现的细节也参与了干涉,可以说创建的对象更复杂,或者说这种模式创建的对象是一个复合对象。