总结JavaScript设计模式编程中的享元模式使用.docxVIP

总结JavaScript设计模式编程中的享元模式使用.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
总结JavaScript设计模式编程中的享 元模式使用 享元模式不同于一般的设计模式,它主要用来优化程 序的性能,它最适合解决大量类似的对象而产生的性能问 题。享元模式通过分析应用程序的对象,将其解析为内在 数据和外在数据,减少对象的数量,从而提高应用程序的 性能。 基本知识 享元模式通过共享大量的细粒度的对象,减少对象的 数量,从而减少对象的内存,提高应用程序的性能。其基 本思想就是分解现有类似对象的组成,将其展开为可以共 享的内在数据和不可共享的外在数据,我们称内在数据的 对象为享元对象。通常还需要一个工厂类来维护内在数据。 在js中,享元模式主要有下面几个角色组成: 客户端:用来调用享元工厂来获取内在数据的类, 通常是应用程序所需的对象, 享元工厂:用来维护享元数据的类 享元类:保持内在数据的类 享元模式的实现和应用 一般实现 我们举个例子进行说明:苹果公司批量生产iph one, iPhone的大部分数据比如型号,屏幕都是一样,少数部分 数据比如内存有分16G, 32G等。未使用享元模式前,我们 写代码如下: functionl phone (model , screen, mem ory, SN) { n bsp; this? mo del=model; nbsp:this? screen=scre en; nbsp: t his? memory=memory; nbsp ;this? SN=SN ; } varphones =[]; for (v ari=0; ilt; 1 000000; i++) { nbsp; var memory=i%2==0? 16:32; nbsp;phones ?push(newlp hone(〃iphon e6s〃, 5.0, me mory, i)); } 这段代码中,创建了一百万个iphone,每个iphone都 独立申请一个内存。但是我们仔细观察可以看到,大部分 iphone都是类似的,只是内存和序列号不一样,如果是一 个对性能要求比较高的程序,我们就要考虑去优化它。 大量相似对象的程序,我们就可以考虑用享元模式去 优化它,我们分析出大部分的iphone的型号,屏幕,内存 都是一样的,那这部分数据就可以公用,就是享元模式中 的内在数据,定义享元类如下: function IphoneFlywe ight (model, screen, memo ry) { nbsp;this? model二model; nbs p; this? sere en=screen; nbsp;this? memory=memo ry; } 我们定义了iphone的享元类,其中包含型号,屏幕和 内存三个数据。我们还需要一个享元工厂来维护这些数据: varf ly weightFacto ry=(functio n() { nbsp: va riphones= {}; nbspjretur n{ nbsp;nb sp:get:fline tion(model, screen, memo ry) { nbsp; nbsp; nbsp; v arkey=model +screen+mem ory; nbsp;nbsp;nbsp; i f (! iphones[key]) { nbs p;nbsp;nbsp ;nbsp;iphon es[key]=new IphoneFlywe ight (model, screen, memo ry); nbsp;nb sp: nbsp:} nbsp; nbsp; n bsp; returni phones [key]; nbsp;nbsp;} nbsp;}; })(); 在这个工厂中,我们定义了一个字典来保存享元对象, 提供一个方法根据参数来获取享元对象,如果字典中有则 直接返回,没有则创建一个返回。 接着我们创建一个客户端类,这个客户端类就是修改 自 iphon e 类: functi onlphone (mo del, screen, memory, SN) { nbsp;this ? flyweight二 flyweightFa ctory. get(m odel, screen , memory); nb sp;this. SN=SN; } 然后我们依旧像之间那样生成多个i phone varpho nes=[]; fo r (vari=0; il t; 1000000; i ++) { nbsp: varmemory=i %2==0?16:32 ; nbspjpho nes? push(ne wlphone (,zip hone6s〃,5. 0 , memory, i)); } console? 1 og(phones); 这里的关键就在于I phone构造函

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档