电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

javascript設計模式 ? 享元模式原理與用法實例分析

瀏覽:69日期:2023-11-03 18:41:53

本文實例講述了javascript設計模式 ? 享元模式原理與用法。分享給大家供大家參考,具體如下:

介紹:在我們日常開發中需要創建很多對象,雖然垃圾回收機制能幫我們進行回收,但是在一些需要重復創建對象的場景下,就需要有一種機制來進行優化,提高系統資源的利用率。

享元模式就是解決這類問題,主要目的是減少創建對象的數量。享元模式提倡重用現有同類對象,如未找到匹配的對象則創建新對象

定義:運用共享技術有效的支持大量細粒度對象的復用。系統只適用少量的對象,而這些對象都很相似,狀態變化很小,可以實現對象的多次復用。由于享元模式要求能夠共享的對象必須是細粒度的對象,因此他又稱為輕量級模式,是一種對象結構型模式。

場景:我們以創建圓形對象為例,通過兩個例子來對比享元模式的效果。

示例:

var redCricle = new Circle(’red’);redCricle.setAttr(10,10,10);redCricle.draw(); var redCricle1 = new Circle(’red’);redCricle1.setAttr(1,1,100);redCricle1.draw(); var redCricle2 = new Circle(’red’);redCricle2.setAttr(5,5,50);redCricle2.draw(); var blueCricle = new Circle(’blue’);blueCricle.setAttr(1,1,50);blueCricle.draw(); var blueCricle1 = new Circle(’blue’);blueCricle1.setAttr(12,12,50);blueCricle1.draw(); var blueCricle2 = new Circle(’blue’);blueCricle2.setAttr(2,12,20);blueCricle2.draw();// 創建了一個對象// 畫圓: 顏色:red x:10 y:10 radius:10// 創建了一個對象// 畫圓: 顏色:red x:1 y:1 radius:100// 創建了一個對象// 畫圓: 顏色:red x:5 y:5 radius:50// 創建了一個對象// 畫圓: 顏色:blue x:1 y:1 radius:50// 創建了一個對象// 畫圓: 顏色:blue x:12 y:12 radius:50// 創建了一個對象// 畫圓: 顏色:blue x:2 y:12 radius:20

這種情況下每次使用都需要實例化一次Circle對象,對系統資源來說是一種浪費。

觀察下不難發現,除了第一次需要實例化,其余的可以基于實例繼續修改。

我們修改下:

var Circle = function(color){ console.log(’創建了一個對象’); this.color = color; this.x; this.y; this.radius; this.setAttr = function(x, y, radius){ this.x = x; this.y = y; this.radius = radius; } this.draw = function(){ console.log(’畫圓: 顏色:’ + this.color + ’ x:’ + this.x + ’ y:’ + this.y + ’ radius:’ + this.radius) }} var ShapeFactory = function(){ this.circleMap = {}; this.getCircle = function(color){ var circle = this.circleMap[color]; if(!circle){ circle = new Circle(color); this.circleMap[color] = circle; } return circle; }}var factory = new ShapeFactory(); var redCricle = factory.getCircle(’red’);redCricle.setAttr(10,10,10);redCricle.draw(); var redCricle1 = factory.getCircle(’red’);redCricle1.setAttr(1,1,100);redCricle1.draw(); var redCricle2 = factory.getCircle(’red’);redCricle2.setAttr(5,5,50);redCricle2.draw(); var blueCricle = factory.getCircle(’blue’); blueCricle.setAttr(1,1,50);blueCricle.draw(); var blueCricle1 = factory.getCircle(’blue’);blueCricle1.setAttr(12,12,50);blueCricle1.draw(); var blueCricle2 = factory.getCircle(’blue’);blueCricle2.setAttr(2,12,20);blueCricle2.draw(); // 創建了一個對象// 畫圓: 顏色:red x:10 y:10 radius:10// 畫圓: 顏色:red x:1 y:1 radius:100// 畫圓: 顏色:red x:5 y:5 radius:50// 創建了一個對象// 畫圓: 顏色:blue x:1 y:1 radius:50// 畫圓: 顏色:blue x:12 y:12 radius:50// 畫圓: 顏色:blue x:2 y:12 radius:20

我們通過一個工廠來動態創建Circle對象,將實例進行保存,保存的位置稱之為享元池。第二次創建時,直接使用已有的結果。節約了系統資源

享元模式總結:

優點:* 大大減少對象的創建,降低系統內存使用,使效率提高。* 享元模式外部狀態獨立,不會影響其內部狀態,使得享元對象可以在不同環境被共享。

缺點:* 提高了系統復雜度,且需要相同的屬性,否則會造成系統混亂

適用場景:* 一個系統有大量相同或相似的對象,造成內存大量耗費。* 對象大部分狀態都可以外部化* 在使用享元模式時需要維護一個存儲享元對象的享元池,而這需要耗費一定的系統資源。因此使用時要衡量。

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 耐磨陶瓷,耐磨陶瓷管道_厂家-淄博拓创陶瓷科技 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | 杭州顺源过滤机械有限公司官网-压滤机_板框压滤机_厢式隔膜压滤机厂家 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 无尘烘箱_洁净烤箱_真空无氧烤箱_半导体烤箱_电子防潮柜-深圳市怡和兴机电 | 球磨机,节能球磨机价格,水泥球磨机厂家,粉煤灰球磨机-吉宏机械制造有限公司 | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | 即用型透析袋,透析袋夹子,药敏纸片,L型涂布棒-上海桥星贸易有限公司 | 济宁工业提升门|济宁电动防火门|济宁快速堆积门-济宁市统一电动门有限公司 | 耐高温电缆厂家-远洋高温电缆 | 步入式高低温测试箱|海向仪器| 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 不锈钢酒柜|恒温酒柜|酒柜定制|酒窖定制-上海啸瑞实业有限公司 | 代理记账_免费注册公司_营业执照代办_资质代办-【乐财汇】 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | TPM咨询,精益生产管理,5S,6S现场管理培训_华谋咨询公司 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 消电检公司,消电检价格,北京消电检报告-北京设施检测公司-亿杰(北京)消防工程有限公司 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 | 工业硝酸钠,硝酸钠厂家-淄博「文海工贸」 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 洗地机_全自动洗地机_手推式洗地机【上海滢皓环保】 | 液氨泵,液化气泵-淄博「亚泰」燃气设备制造有限公司 | 首页 - 军军小站|张军博客| 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 飞利浦LED体育场灯具-吸顶式油站灯-飞利浦LED罩棚灯-佛山嘉耀照明有限公司 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 创客匠人-让IP变现不走弯路 | 潍坊大集网-潍坊信息港-潍坊信息网 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 艾乐贝拉细胞研究中心 | 国家组织工程种子细胞库华南分库 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 小程序开发公司-小程序制作-微信小程序开发-小程序定制-咏熠软件 | 手术室净化厂家-成都做医院净化工程的公司-四川华锐-15年特殊科室建设经验 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 制氮设备_PSA制氮机_激光切割制氮机_氮气机生产厂家-苏州西斯气体设备有限公司 | 清管器,管道清管器,聚氨酯发泡球,清管球 - 承德嘉拓设备 |