zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    App.domain http->https
    js 点赞数 处理
    js插入拼接链接 --包含可变字段
    MYSQL修改表操作
    PHP上传文件类 代码练习
    PHP上传文件代码练习2 (重复文章)
    自制山寨百度一下
    PHP多文件上传代码练习
    修改PHP上传文件的大小限制
    三维数组变两位数组
  • 原文地址:https://www.cnblogs.com/xiankui/p/4025847.html
Copyright © 2011-2022 走看看