创建对象之---工厂模式 --个人心得

一、工厂模式
 
            顾名思义,这个肯定是一个类似于机器的方法,只要把原料(参数)放入机器,经过机器加工,就能获得想要的对象。
       
 具体的例子:
     
   function creatPerson(name,age){
       
          var o={};
          o.name=name;
          o.age=age;
          o.sayHello=function(){
              alert("123");
            }
           return o;
    }
 
 
上面的方法就叫做工厂。而我们如果想加工两个东西,下面是实际的加工:
 
      var person1=creatPerson("lwl",25);
      var person2=creatPerson("lucy",30);
 
 这时候person1和person2都获得了creatPerson()函数加工的数据(即对象
 
这里注意几点:
    
         1、每个实际生产出来的对象,虽然是根据一个方法来的,但是并不相同。所以每个产生出来的对象并不相同。
         2、即使两个生产对象时候,参数完全相同的情况下,产生的对象也不相同。比如讲上面改为:
                  
                var person1=creatPerson("lwl",25);
                var person2=creatPerson("lwl",25);

       这样产生的person1和person2,也不相同。感觉非常难理解是吧?其实可以这样理解,把工厂模式想象成加个冰淇淋的机器(说到这,我无耻的流口水了),下面是具体的代表含义:
 
             工厂模式的构造函数--------------------冰淇淋机器,功能是产生最后的冰淇淋(对象)
           工厂模式的各个参数--------------------加入冰淇淋的原料哦,比如可以是冰淇淋的味道,大小,形状等          
           工厂模式的实际工作过程---------------产生冰淇淋过程,每次都放入一些原料(参数),机器转动,生成一个美味的冰淇淋,给所需要的人,所需要的人就获得了冰淇淋(实际的变量获得了实例对象)。

          这个例子可能让大家明白了不少,可是有人又要有疑问了,我放入的参数,产生的冰淇淋应该是一样的啊。为什么上面说不一样呢。其实是一样的,但是有个很重要的区别,两次产生的冰淇淋给的是两个人,两个不同的人,所以大家看到的结果是,这个生产的结果是不一样的,一个是A获得了冰淇淋,一个是B获得了冰淇淋。所以A!=B
         但是,可以看到,当参数一样,有些情况还是一样的,比如:
               1) var p1=p2= creatPerson("lwl",34);    
                      -- 什么,将一个冰淇淋同时给两个人吃?
                      --- 是啊,人家是情侣不行嘛。
此时。两个变量实际都指向产生的这个新对象,他们两个也就相当于一个指针类似的东西,所以指向的东西是一样的。
              2)一开始的的方法,创建两个实例对象例子,但是还是有点相同之处:
                             var person1=creatPerson("lwl",25);
                             var person2=creatPerson("lwl",30);
                             person1==person2         flase 
                             person1.name==person2.name   True
                             person1.age==person2.age    false  
 
                       这里,很奇怪的是:
                             person1.sayHello== person1.sayHello   false  
 
                            //两个获得的都是一个声明的一个新的匿名函数。所以不是同一个函数了。所以不管函数里面是声明都不会相等。
                    
 
               而此时,看一下最上面的结果:
                           
                      p1==p2            //true
                      p1===p2          //true
                      p1.name==p2.name    //true
                         ..
                         ..
                     p1.sayHello=p2.sayHello     / / true
         
          这里一开始让我很费解,后来想想也就解释的通了,这里两个指向的其实是同一个对象的同一个方法。就像两个人同时吃冰淇淋的顶部,相当于冰淇淋的所有部分都是共享的。

 
总结:
     一、工厂模式优点:通过工厂模式,能够迅速创建想要的对象。简洁、明了、迅速,并且所有的对象的基本结构都是一样的。(比如都是冰淇淋,而不可能一个是冰淇淋一个是饼干)
     二、工厂模式缺点:方法最明显的缺点,
             1、无法解决对象识别的问题,即怎么知道对象的一类型。(书上的解释)
             2、几个对象无法共享某一个特定的属性,对象彼此之间都是不相同的。
posted @ 2014-03-22 21:09  lwl_star  阅读(1759)  评论(0编辑  收藏  举报