小白学习JavaScript设计模式(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':
                        that.work = '工程师';
                        that.workDescript = '每天沉醉于编程';
                        break;
                    case 'UE':
                        that.work = '工程师';
                        that.workDescript = '每天沉醉于编程';
                        break;
                    case 'code':
                        that.work = '工程师';
                        that.workDescript = '每天沉醉于编程';
                        break;
                    default:
                        that.work = work;
                        that.workDescript = '对不起,我们还不清楚您所选择职位的相关描述'
                    }
                })(work, that);
            };

这几个类之间看起来并有没有什么联系,这就可以看做成一些制造一个玩具的零件,在组装之前必须先要把他们做好,这个过程是必不可少的。建造者模式注重的也正是建造的这个过程。接下来我们就需要开始组装。来构建一个应聘者类

            /*应聘创造者*/    
            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); //xiao
            console.log(person.name.secondName); //ming
            console.log(person.work.work); //工程师
            console.log(person.work.workDescript); //每天沉醉于编程
            person.work.changeDescript('更改一下职位描述');
            console.log(person.work.workDescript); //更改一下职位描述
扫描二维码关注公众号,回复: 4109066 查看本文章

猜你喜欢

转载自blog.csdn.net/DengZY926/article/details/83026618