所谓的工厂模式,顾名思义就是成批量地生产模式。它的核心做用也是和现实中的工厂同样利用重复的代码最大化地产生效益。在javascript中,它经常用来生产许许多多相同的实例对象,在代码上作到最大的利用。
工厂模式定义建立对象的接口,可是让子类决定实例化哪一个类。工厂方法将类的实例化延迟到子类
javascript
首先是建立构造函数,区别物种的不一样属性。html
//定义人的构造函数
var man = function(o) {
this.foots = o.foot || 2;
this.legs = o.legs || 2;
}
//定义鱼的构造函数
var fish = function(o) {
this.qi = o.qi || 4;
this.foots = o.foots || 9;
}
//定义外星人的构造函数
var et = function(o) {
this.legs = o.legs ||10;
this.eyes = o.eyes || 6;
}
复制代码
接下来咱们再建立一个工厂的构造函数:java
//工厂函数的构造函数
var F = function() {}
复制代码
接着在原型上设置它的默认方法:设计模式
//f的默认输出实例函数;
F.prototype.vehicleClass = man;
复制代码
此时,该工厂函数默认生产的是man的实例,在不配置的状况下咱们产生的是人类的实例,而后咱们对vehicleClass这个函数进行扩充,生成一个新的函数,此函数能够对不一样的类别进行甄别,bash
//类的甄别函数
F.prototype.vehicleCreate = function(o) {
switch(o.vehicleType) {
case 'man' :
this.vehicleClass = man;
break;
case 'fish' :
this.vehicleClass = fish;
break;
case 'et' :
this.vehicleClass = et;
break;
}
//返回实例
return this.vehicleClass(o);
}
复制代码
经过swith语句的索引,能够经过vehicleType
进行不一样类的实例化。那么咱们看看这个类是如何工做的。首先时实例工厂类.函数
var Factory = new F();
复制代码
而后调用vehicleCreate
方法,经过传参获取不一样实例的对象。ui
var Man = Factory.vehicleCreate({
vehicleType : 'man',
legs : 2,
foots : 2
});
复制代码
这样,经过vehicleType
的值,咱们能够告诉工厂类咱们但愿输出的物种,而后经过其余的属性,咱们能够控制该物种实例的各类基础属性。this
工厂模式适用于如下场景:spa
工厂模式实现起来较为简单,不单单是工厂模式,几乎全部模式的代码看起来都比较简单。设计模式其实就是把常常用到的代码概括总结系统的表达而已。在以后的应用中,咱们能够系统地去想到这些模式而且运用它们。设计模式更表明的是一种系统思想,而不是重复的代码堆砌。prototype