javaScript设计模式:工厂模式

工厂模式的目的是为了创建对象,对象创建重复操作比较频繁甚至需要批量创建;所创建的对象不确定具体类型,但所有对象一般具备公共特性又包含自身独有特性。

基于这样的模式需求,可以通过一个父类来创建包含所有公共特性的原型,然后通过子类创建具体的对象。

示例:

//父类
function CarMaker(){}
//一个父类的方法(这里可以用一个父类属性专门来验证工厂字类原型是否已经继承父类)
CarMaker.prototype.drive = function(){
    return "Vroom, I have " + this.doors + " doors";
}
//静态工厂方法
CarMaker.factory = function(type){
    var constr = type,
        newcar;
    if(typeof CarMaker[constr] !== "function"){
        throw{
            name: "Error",
            message: constr + " doesn't exist"
        };
    }
    if(typeof CarMaker[constr].prototype.drive !== "function"){
        CarMaker[constr].prototype = new CarMaker();
    }
    newcar = new CarMaker[constr]();
    return newcar;
}
//特定的工厂生成线
CarMaker.Compact = function(){
    this.doors = 4;
}
CarMaker.Convertible = function(){
    this.doors = 2;
}
CarMaker.SUV = function(){
    this.doors = 24;
}