javascript设计模式之工厂模式

/* 

 * 工厂模式

 * 需要依赖具体环境创建不同实例

 * 处理大量具有相同属性的小对象

 * 

 * 比如汽车、不同类型的汽车

 * source from: JavaScript Patterns page 148

 *

*/



function CarMaker() {};



// 通用方法

CarMaker.prototype.drive = function () {

    return "Vroom, I have "+ this.doors + " doors.";

};



// 定义静态工厂方法

CarMaker.factory = function (type) {



    var constr = type,  // 个性化的汽车工厂

        newcar = null;  // 生产出的car对象



    // 如果构造函数不存在,则发生错误

    if (typeof CarMaker[constr] !== "function") {

        throw {

            name: "Error",

            message: constr + " does not 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.SUV = function () {

    this.doors = 8;

};





// 应用

var compactCar = CarMaker.factory("Compact"),

    suvCar = CarMaker.factory("SUV");



console.log(suvCar.drive());  // Vroom, I have 8 doors.

 

你可能感兴趣的:(JavaScript)