• 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)
            
        }
    })()
  • 相关阅读:
    Objective-C Runtime Method Swizzling 实践
    code signing blocked mmap() of '/private/var/contai 报错
    supervisor 监控nginx 一直在重启的问题
    Supervisor 两种不同的启动方式,带来两种不同的结果
    addChildViewController后 Childvc viewWillAppear 不调用的问题
    cocoapods 升级到最新beta 版
    addChildViewController后开启热点/wifi/打电话引起的子vc的布局问题
    "undefined method `root' for nil:NilClass" error when using "pod install" 解决办法
    macOS sierra 10.12 Cocoapods 私有库
    Demo
  • 原文地址:https://www.cnblogs.com/yaowen/p/6892294.html
Copyright © 2020-2023  润新知