工厂模式
与构造器模式类似,工厂模式是另外一种关注对象创建概念的创建模式。同其它模式的不同之处在于它并没有明确要求我们使用一个构造器来创建对象。取而代之,一个工厂提供一个创建对象的公共接口,我们可以指定我们希望被创建的工厂对象的类型。
示例:
function Car(options){
this.doors = options.doors || 4
this.state = options.state || "brand new";
this.color = options.color || "silver";
}
function Truck( options){
this.state = options.state || "used";
this.wheelSize = options.wheelSize || "large";
this.color = options.color || "blue";
}
function Factory(){}
Factory.prototype.objClass = Car
Factory.prototype.createObj = function(options){
if(options.type == 'car'){
this.objClass = Car
}else {
this.objClass = Truck
}
return new this.objClass(options)
}
创建一个实例对象
var objFactory = new Factory()
var car = objFactory.createObj({
type: 'car',
color: 'red',
doors: 6
})
console.log(car instanceof Car)
console.log(car)
使用场景
- 对象或组件设计到高程度级别的复杂度
- 需要根据环境生成不同的实体对象时
- 需要在共享拥有共同属性的对象或组件上工作
- 当带有其它仅仅需要满足一种API约定(又名鸭式类型)的对象的组合对象工作时.这对于解耦来说是有用的
抽象工厂
1、概念:以一个通用的目标,将一组独立的工厂进行封装
2、使用场景:适用于必须从其创建或生成对象的方式处独立,或者需要同多种类型的对象一起工作的情况下。