8、分即是合 ---创建者模式
创建者模式:将一个复杂对象的构建层雨其表象层相互分离,同样的构建过程可以采用不同的表示。
针对一些相同共有的属性,很多部分需要抽象提取,不过要明确创建内容。
建造者模式在创建对象时要更为复杂一些,虽然其目的也是为了创建对象,但是更多关系的是创建这个对象的整个过程,甚至于创建对象的每一个细节,比如创建一个人,我们创建的结果不仅仅要得到人的实例,还要关注创建人的时候,这个人应该穿什么衣服,是男的还是女的,兴趣爱好。所以建造者模式更注重时创建的细节,下边介绍一名应聘者都有那些兴趣爱好,他的姓名,期望职位。。。。
1 //创建一个人类 2 var Human = function(param){ 3 //技能 4 this.skill = param && param.skill || '保密'; 5 //兴趣爱好 6 this.hobby = param && param.hobby || '保密'; 7 } 8 9 //人类原型方法 10 Human.prototype = { 11 getSkill : function(){ 12 return this.skill; 13 } 14 getHobby : function(){ 15 return this.hobby; 16 } 17 } 18 19 //实例化姓名类 20 var Named = function(){ 21 var that = this; 22 //构造器 23 (function(name, that){ 24 that.wholeName = name; 25 if(name.indexOf(' ')){ 26 that.FirstName = name.slice(0, name.indexOf(' ')); 27 that.secondName = name.slice(name.indexOf(' ')); 28 } 29 30 })(name, that); 31 } 32 33 //实例化职位类 34 var Work = function(work){ 35 var that = this; 36 //构造器 37 (function(work, that){ 38 switch(work){ 39 case 'code': 40 that.work = 'work1'; 41 that.workdescript = 'desc'; 42 break; 43 case 'ui' : 44 that.work = 'work2'; 45 that.workdescript = 'desc2'; 46 break; 47 //.... 48 } 49 })(work, that); 50 } 51 52 //更期望的职位 53 work.prototype.changework = function(work){ 54 this.work = work; 55 } 56 57 //添加职位描述 58 work.prototype.changedescript = function(setence){ 59 this.workdescript = setence; 60 }
这里是把每个过程细化,抽象出来的3个类 ----应聘者,姓名及期望职位
1 //应聘者建造者 2 var person = function(name, work){ 3 var _person = new Human(); 4 _person.name = new Named(name); 5 _person.work = new work(work); 6 return _person; 7 } 8 9 //person.skill; 10 //person.name.FirstName; 11 //person.work.desc;
回头一看,工厂模式创建出来的是一个对象,它追求的创建的结果,那仅仅是是一个实实在在的创建过程。而创建者模式有所不不同,它不仅仅可以得到创造的结果,然而也参加具体过程,可以说创建的对象更复杂,或者说这种模式创建的对象是一个复合对象。
浙公网安备 33010602011771号