美文网首页
JavaScript设计模式 | 06-建造者模式

JavaScript设计模式 | 06-建造者模式

作者: 夏海峰 | 来源:发表于2018-08-20 13:57 被阅读9次

1、模式定义

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

2、对比 建造者模式和工厂模式

工厂模式(或抽象工厂)主要是为了创建对象实例或者类簇,该模式关心的是最终产出,即创建的结果是什么;该模式并不关心对象创建的整个过程,仅仅需要知道最终的创建结果即可。

建造者模式的目标任务也是创建对象,但该模式更多关心的是对象创建的整个过程,甚至关心到对象创建的每一个细节。比如用建造者模式创建一个“Person”的对象时,它不仅要得到Person的对象,还要深入到对象创建的过程中去,人应该穿什么衣服,男的还是女的,兴趣爱好什么等。

因此,建造者模式和工厂模式之间最大的区别在于,前者更关注对象创建的整个过程,而后者不会。

3、建造者模式 举例

// 人的相关描述
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;
    }
}

// 人的姓名
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(' '));
        }
    })(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;
        }
    })(work,that);
}

Work.prototype.changeWork = function(work){
    this.work = work;
}

Work.prototype.changeDescript = function(setence){
    this.workDescript = setence;
}


// 建造者模式:用3个类组合调用,创建出一个完整的Person类
// Person类由 Human / Named / Work 三个类组合而成
var Person = function(name,work){
    var _person = new Human();
    // 关注对象创建的细节和过程
    _person.name = new Named(name);
    _person.work = new Work(work);
    return _person;
}

// 测试
var person = new Person('xiao ming', 'code');

console.log(person.skill);
console.log(person.name.FirstName);
console.log(person.work.work);
console.log(person.work.workDescript);
person.work.changeDescript('更改一下职位描述');
console.log(person.work.workDescript);

4、小结

建造者模式,不仅可以得到对象创建的结果,还参与了对象创建的具体过程,对对象创建的实现细节进行了更加细粒度的控制。建造者模式,创建的对象更为复杂,其结果是一个复合对象。


完!!!

相关文章

  • JavaScript设计模式 | 06-建造者模式

    1、模式定义 建造者模式,将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示。 2、对比 建...

  • javascript设计模式——建造者模式

    特点:工厂模式的特点是创建的结果都是一个完整的个体,我们对创建过程不得而知,我们只了解得到的创建结果对象。而建造者...

  • JavaScript设计模式——建造者模式

    写在前面 早该更新文章了,然而最近深陷项(囹)目(圄)。为了适配万恶的IE8,不得不使用陈旧的框架Ext,从未接触...

  • Javascript设计模式——建造者模式

    建造者模式是相对比较简单的一种设计模式,属于创建型模式的一种; 定义:将一个复杂的对象分解成多个简单的对象来进行构...

  • Retrofit

    Retrofit设计模式 动态代理,装饰模式,建造者模式,抽象工厂模式,适配器模式 建造者模式创建Retrofit...

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 设计模式之建造者模式

    设计模式之建造者模式 1. 模式定义 建造者模式又可以成为生成器模式,它属于对象创建型模式。建造者模式将一个复杂对...

  • java设计模式--建造者模式

    java设计模式--建造者模式 建造者模式定义 建造者模式:是将复杂对象的构建与表示进行分离,使同样的构建过程会有...

网友评论

      本文标题:JavaScript设计模式 | 06-建造者模式

      本文链接:https://www.haomeiwen.com/subject/xnxliftx.html