建造者模式(Builder):将一个复杂对象的构建层与其表示层相互分离,同样的结构过程可采用不同的表示。建造者模式更注重的是创建的细节。例如一个应聘者的实例,在创建过程中需要注意应聘者的兴趣爱好,姓名等个人信息,以及期望职位等等。

        //创建一个人类
        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.lastName = name,slice(name.indexOf(' '));
                }
            })(name,that)
        }
        //实例化职位类
        var Work = function(work){
            var that = this;
            //构造器 根据传入的职位特征设置对应职位和描述
            (function(work,that){
                switch(work){
                    case 'code':
                        that.work = '程序员';
                        that.workDescription = '沉醉于编程';
                        break;
                    case 'UE':
                        that.work = '设计师';
                        that.workDescription = '设计是一种艺术';
                        break;
                    case 'teach':
                        that.work = '教师';
                        that.workDescription = '教书育人';
                        break;
                    default:
                        that.work = work;
                        that.workDescription = '抱歉,不清楚你选择的职位描述'
                }
            })(work,that)
        }
        Work.prototype.changeWork = function(work){
            this.work = work;
        }
        Work.prototype.changeDescription = function(sentence){
            this.workDescription = sentence;
        }

这样创建了抽象出来的三个类——应聘者类、姓名解析类与期望职位类。在之后创建一位应聘者,然后将这三个类组合调用,就可以创建出一位完整的应聘者

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('Haoran Li','code');