小白學習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); //更改一下職位描述

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章