js40---享元模式

/**
 * 享元模式是一个为了提高性能(空间复杂度)的设计模式
 * 他使用与程序会生产大量的相类似的对象是耗用大量的内存的问题
 */
(function(){
    /**
     * 制造商
     * 型号
     * 拥有者
     * 车牌号码
     * 生产日期
     */
    var Car = function(make,model,year,owner,tag,renewDate){
        this.make = make;
        this.model = model;
        this.year = year;
        this.owner = owner;
        this.tag = tag;
        this.renewDate = renewDate;
        this.getMake = function(){
            return this.make;
        }
    }

    var simpleProfiler2 = function(componet){//形参看成构造函数传入的成员变量的值。函数名看成类名。this.看成成员属性和成员方法。
        this.componet = componet;
        this.action = function(methodName){
            var self = this;
            var method = componet[methodName];//对象的成员方法可以用中括号获取
            if(typeof method == "function"){
                var startDate = new Date().getTime();
                method.apply(self.componet,arguments);
                var endDate = new Date();
                alert(endDate - startDate);                
            }
        }
    }    
    //北京车两 4150000 全部要登记
    var ca = new Array();
    function addCar(){
        this.begin = function(){
            for (var i = 0; i < 4150000; i++) {
                ca.push(new Car("东风","雪铁龙","2012-4-8",
                    "云凤程","京pcat2145","2012-2-13"));
            }
        }
    }
    new simpleProfiler2(new addCar()).action("begin")
    /**
     * extjs的开发下拉框,单选框
     * 等小组件如果用享元模式 会非常的节省性能的开支
     */    
})()
/**
 * 享元模式是一个为了提高性能(空间复杂度)的设计模式
 * 他使用与程序会生产大量的相类似的对象是耗用大量的内存的问题
 */
(function(){
    /**
     * 制造商
     * 型号
     * 拥有者
     * 车牌号码
     * 生产日期
     */
    var Car = function(make,model,year){
        ///共性属性
        this.make = make;
        this.model = model;
        this.year = year;
        this.getMake = function(){
            return this.make;
        }
    }
    
    var carInfoFactory = (function(){//carInfoFactory代指内部函数、类,匿名函数执行,就相当于外部函数执行了一次,内部函数执行多次公用外部数据
        var carInfo = {};
        return function(make,model,year){
            if(carInfo[make+model+year]){
                return carInfo[make+model+year];
            }else{
                var newCar = new Car(make,model,year);
                carInfo[make+model+year] = newCar;
                return newCar;
                
            }
        }
    })();
    
    //工厂
    var myCarInfo = function(){
        this.createCar = function(make,model,year,owner,tag,renewDate){
            var c = carInfoFactory(make,model,year);//外部函数,利用闭包,调用多次减少了new的时间
            //特性不同的属性
            c["owner"] = owner;
            c["tag"] = tag;
            c["renewDate"] = renewDate;
            return c;//返回的是地址,同一个对象
        }
    }
        
    var test = new myCarInfo();//工厂对象只有一个
    var startDate = new Date().getTime();
    var ca = new Array();
    for (var i = 0; i < 5; i++) {
        ca.push(test.createCar("东风","雪铁龙","2012-4-8",
                    "云凤程","京pcat2145","2012-2-13"))//生产车的方法调了4150000次
    }
    var endDate = new Date();
    alert(endDate - startDate);    
    for(arr in ca){
        alert(ca[arr].make + "--" +ca[arr].renewDate)
        
    }
})()

 

转载于:https://www.cnblogs.com/yaowen/p/6892294.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值