码迷,mamicode.com
首页 > Web开发 > 详细

js40---享元模式

时间:2017-05-23 08:08:59      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:复杂度   单选   tag   model   中括号   问题   利用   argument   下拉框   

/**
 * 享元模式是一个为了提高性能(空间复杂度)的设计模式
 * 他使用与程序会生产大量的相类似的对象是耗用大量的内存的问题
 */
(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)
        
    }
})()

 

js40---享元模式

标签:复杂度   单选   tag   model   中括号   问题   利用   argument   下拉框   

原文地址:http://www.cnblogs.com/yaowen/p/6892294.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!