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