javascript设计模式-享元模式(10)

来源:互联网 发布:淘宝电脑版首页登录 编辑:程序博客网 时间:2024/05/01 05:57

享元模式是一种优化模式,它最适合解决因创建类似对象而涉及性能的问题。这种模式在js中尤其有用,因为复杂的js代码可能很快就会用光浏览器的所有可用内存。通过把大量独立对象转化为少量共享对象,可降低运行web应用程序所需的资源数量

传统的多实例对象场景

//出厂商、型号、出厂日期、拥有者、车牌号、最近登记日期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;};Car.prototype = {    constructor:Car  ,     getMake :function(){        return this.make;    },    getModel:function(){        return this.model;    },    getYear:function(){        return this.year;    },    renewRegistration:function(newRenewDate){        this.renewDate = newRenewDate;    }};var arr = [] ;var stime = new Date().getTime();for(var i = 0 ; i < 5000000; i ++){    // runtime: 734ms  web: 570    arr.push(new Car('上海大众','迈腾','2012-02-03','bhx','bj0011','2013-04-01'));}var etime = new Date().getTime();alert(etime - stime);

享元模式的改进

//享元模式:优化的设计模式 (优化:时间[代码的运行时间]、空间[web浏览器内存])    //享元模式:内在数据static (出厂商、型号、出厂日期)  外在数据(拥有者、车牌号、最近登记日期)    //出厂商、型号、出厂日期、拥有者、车牌号、最近登记日期    var Car = function(make, model, year) {        this.make = make;        this.model = model;        this.year = year;    };    Car.prototype = {        constructor: Car,        getMake: function() {            return this.make;        },        getModel: function() {            return this.model;        },        getYear: function() {            return this.year;        }    };    //工厂模式(闭包工厂)    var CarFactory = (function() {        //用于承装已经生产好的car         var createdCars = {};        return {            createCar: function(make, model, year) {                //如果createdCars对象里已经存在当前的make ,model , year                if (createdCars[make + model + year]) {                    return createdCars[make + model + year];                } else {                    var car = new Car(make, model, year);                    createdCars[make + model + year] = car;                    return car;                }            }        };    })();    //单体模式(外在的数据 和内在的数据 结合在一起)    var CarRecordManager = (function() {        //把登记好的汽车放到这个对象里        var carRecordDataBase = {};        return {            addCarRecord: function(make, model, year, owner, tag, renewDate) {                var car = CarFactory.createCar(make, model, year);                carRecordDataBase[tag] = {                    owner: owner,                    renewDate: renewDate,                    car: car                };            },            renewRegistration: function(tag, newRenewDate) {                carRecordDataBase[tag].renewDate = newRenewDate;            }        };    })();    var arr = [];    var stime = new Date().getTime();    for (var i = 0; i < 5000000; i++) {        // runtime: 734ms  web: 570        // arr.push(new Car('上海大众','迈腾','2012-02-03','bhx','bj0011','2013-04-01'));        //享元模式的测试        // runtime: 300ms   web: 230        arr.push(CarRecordManager.addCarRecord('上海大众', '迈腾', '2012-02-03', 'bhx', 'bj0011', '2013-04-01'));    }    var etime = new Date().getTime();    alert(etime - stime);
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 p2p网站 公积金利率 wdzj 贷款计算机 贷款吧 容易下款的口子 p2p下载 能下款的口子 好借款的app 能快速借到钱的app 通过率高的贷款app 飞货app 通过高的贷款app 有什么平台可以贷款 小额贷款网站 捷信贷款2万要还多少 有哪些小额贷款平台 如何向银行贷款创业 哪个平台可以贷款 网络贷款怎么还 网上贷款有风险吗 好下的贷款口子 线上贷款平台 有哪些贷款平台 正规有名的网上贷款app 10分钟下款的网贷平台 起步6000的新网贷口子 18岁好下款的网贷 凭芝麻分可以下款的网贷平台 通过率高的app小贷 不需要查征信的网贷 网费 坐网约车收空调费 网费一年多少钱 网费查询 网约车加收空调费 交网费 网费怎么交 手机欠费变成2g网怎么恢复4g 2018网费欠费交了多久恢复 网费一个月多少钱