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;

回头一看,工厂模式创建出来的是一个对象,它追求的创建的结果,那仅仅是是一个实实在在的创建过程。而创建者模式有所不不同,它不仅仅可以得到创造的结果,然而也参加具体过程,可以说创建的对象更复杂,或者说这种模式创建的对象是一个复合对象。

 

posted on 2016-09-10 10:29  Mc525  阅读(255)  评论(0)    收藏  举报

导航