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

  1. Flyweight(享元模式)

    import java.util.Hashtable; /** * 享元模式 * @author TMAC-J * 享元模式一般和工厂模式一起使用,但此处为了更好说明,只用享元模式 * 定义:享元模式 ...

  2. 设计模式(十二)享元模式(Flyweight Pattern)

    一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非 ...

  3. 设计模式--享元模式Flyweight(结构型)

    一.享元模式 在一个系统中如果有多个相同的对象,这些对象有部分状态是可以共享的,我们运用共享技术就能有效地支持大量细粒度的对象. 二.例子 举个围棋的例子,围棋的棋盘共有361格,即可放361个棋子. ...

  4. java享元模式(flyweight)

    有个问题: Integer i1 = 12; Integer i2 = 12; System.out.println(i1 == i2);//输出true Integer i1 = 130; Inte ...

  5. 享元模式 - Flyweight

    Flyweight(享元模式) 定义 GOF:运用共享技术有效地支持大量细粒度的对象. GOF的定义比较专业化,通俗来说,当你有大量相似的实例时,你把其中相同的实例取出来共享. 例子 在你的游戏场景中 ...

  6. C#设计模式-享元模式

    在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重,然 ...

  7. C#设计模式系列:享元模式(Flyweight)

    当频繁地从数据源读取数据时,读出的内容存在重复,那么需要使用享元模式(Flyweight)来提高内存效率,Flyweight模式将节省更多空间,共享的Flyweight越多,空间节省越大. 1.享元模 ...

  8. javascript - 享元模式

    享元模式笔记  运用共享技术有效的支持大量的细粒度对象,避免对象间拥有相同内容造成多余的开销  享元模式主要还是对其数据.方法共享分离,它将数据和方法分成内部数据.内部方法和外部数据.外部方法.  内 ...

  9. 设计模式C#实现(十三)——享元模式(蝇量模式)

    意图 0 适用性 1 结构 2 实现 3 效果 4 参考 5 意图 运用共享技术有效地支持大量细粒度的对象. 适用性 当以下情况都成立时使用: 一个程序使用了大量的对象 完全由于使用大量对象造成很大存 ...

  10. 享元模式/Flyweight模式/对象结构型/设计模式

    flyweight 享元模式(对象结构型) Flyweight在拳击比赛中指最轻量级,即"蝇量级"或"雨量级",这里选择使用"享元模式"的意 ...

随机推荐

  1. 我的投资案例(3)-看好互联网和金融两大朝阳行业,参投入股垂直金融招聘平台"职业梦CareerDream.cn"

     作为一名喜欢读书,关注中国和欧美国家发展的知识青年,  同时作为一名程序员和对金融投资感兴趣的业余爱好者,本人一直看好  以IT互联网为代表的科技和以投资VC为代表的金融,这2大朝阳行业的发展.   ...

  2. 【习题 8-17 UVA - 11536】Smallest Sub-Array

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 尺取法. 考虑一个1..i的窗口. 里面在到达了i位置的时候恰好有1..k这些数字了. 为了更接近答案. 显然可以试着让左端点变成2 ...

  3. C# Winform利用POST传值方式模拟表单提交数据(Winform与网页交互)

    其原理是,利用winfrom模拟表单提交数据.将要提交的參数提交给网页,网页运行代码.得到数据.然后Winform程序将网页的全部源码读取下来.这样就达到windows应用程序和web应用程序之间传參 ...

  4. EChart报表插件使用笔记(1)

    报表插件Echart java类 package com.spring.controller; import java.io.IOException; import java.util.Arrays; ...

  5. python之文件操作-复制、剪切、删除等

    以下是把sourceDir目录下的以.JPG结尾的文件所有拷贝到targetDir目录下: <span style="font-size:18px;">>> ...

  6. PHP从数组中删除元素的方法

    PHP从数组中删除元素的方法 本篇文章主要介绍了PHP从数组中删除元素的四种方法实例 删除一个元素,且保持原有索引不变 使用 unset 函数,示例如下: 1 2 3 4 5 <?php   $ ...

  7. SpringBoot结合MongoDB入门

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...

  8. swing导出html到excel

    swing导出html到excel 1  ShowCopDetal package com.product; import java.awt.BorderLayout; import java.awt ...

  9. react 常用的ui库

    1. https://ant.design/docs/react/introduce-cn   ANT DESIGNui 2. http://www.material-ui.com/#/   Mate ...

  10. HTML5新增的一些特性

    HTML现在已经不是SGML的子集,主要是关于图像,位置,储存,多任务等功能的增加. .绘画canvas: .用于媒介回放的video: Ogg是带有Theora视频编码和Vorbis音频编码的文件: ...