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.