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) } })()