在JS中创建对象会习惯的使用new关键字和类构造函数(也是可以用对象字面量)。
工厂模式就是一种有助于消除两个类依赖性的模式。
工厂模式分为简单工厂模式和复杂工厂模式,这篇主要讲简单工厂模式。
简单工厂模式:使用一个类来生成实例。
复杂工厂模式:使用子类来决定一个成员变量应该是哪个具体的类的实例。
简单工厂模式:
常用对象方法创建和调用
var BallShop = function(){};
BallShop.prototype = {
sellBall : function(model){
var ball;
switch(model){
case "Tennis":
ball = new TennisBall();
break;
case "bask":
ball = new BaskBall();
break;
case "volly":
ball = new VollyBall();
break;
default:
ball = new FootBall();
break;
}
return ball;
}
}
var JX = new BallShop();
JX.sellBall("tennis");
以上方式能够满足大多数情形下使用,但扩展性就不友好了,如果需要添加一些新的球类,必须修改球类的switch部分。
把这部分单独出来交给一个简单额工厂对象:
var BallFactory = {
createBicycle:function(model){
var ball;
switch(model){
case "Tennis":
ball = new TennisBall();
break;
case "bask":
ball = new BaskBall();
break;
case "volly":
ball = new VollyBall();
break;
default:
ball = new FootBall();
break;
}
return ball;
}
}
BallFactory是一个脱离于BallShop的单体。能够降低耦合度。当需要新添加类型的时候,只要修改BallFactory工厂单体对象就行。
var BallShop = function(){};
BallShop.prototype = {
sellBall:function(model){
var ball = BallFactory.createBall(model);
return ball;
}
}
以上就是一个简单的简单工厂模式。改模式就是将成员对象的创建工作交给一个外部对象实现,该外部对象可以是一个简单的命名空间,也可以是一个类的实例。