定义:工厂模式就是把成员变量的创建工作交给一个外部的对象去做(可以是类的实例也可以是一个命名空间);
例子:比如你去一家商店去买球;
var BallShop = function(){} //定义一个商店类
BallShop.prototype ={
getBall:function(type){
var ball;
switch(type){
case A :
ball = new A();//A球
break;
case B :
ball = new B();//B球
break;
.
.
.
default :
ball = new N();//N球
break;
}
return ball;
}
}
如果你要获得一个N球,那么你需要
var BallShop = new BallShop ();//先有一个商店;
var Ball = Ballshop.getBall(‘N’);//得到N类型的球;
但是如果我想要一个大的红色的N类型球;那么以上方法的拓展性就不好了;
这个时候我们就需要把getBall方法单独用一个类或者命名空间去代替;
方法一:命名空间
var BallFactory ={
createBall:function(type){
var ball;
switch(type){
case A :
ball = new A();//A球
break;
case B :
ball = new B();//B球
break;
.
.
.
default :
ball = new N();//N球
break;
}
return ball;
}
};
所以现在获取一个球;
var BallShop = function(){} //定义一个商店类
BallShop.prototype ={
getBall:function(type){
var ball = BallFactory.createBall(type);
return ball;
}
}
BallFactory是脱离BallShop的单体对象;降低了耦合度,如需要添加新的类型和属性,只需要修改BallFactory对象即可;
方法二:类;
var BallFactory = function(){};
BallFactory.prototype={
createBall:function(type){
var ball;
switch(type){
case A :
ball = new A();//A球
break;
case B :
ball = new B();//B球
break;
.
.
.
default :
ball = new N();//N球
break;
}
return ball;
}
};
获取一个球;
var BallShop = function(){} //定义一个商店类
BallShop.prototype ={
getBall:function(type){
var ball = BallFactory.createBall(type);
return ball;
}
}