一、工厂模式
顾名思义,这个肯定是一个类似于机器的方法,只要把原料(参数)放入机器,经过机器加工,就能获得想要的对象。
具体的例子:
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、几个对象无法共享某一个特定的属性,对象彼此之间都是不相同的。
创建对象之---工厂模式 --个人心得,布布扣,bubuko.com
创建对象之---工厂模式 --个人心得
原文:http://www.cnblogs.com/lwl8/p/3614586.html