日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

javascript 設計模式之享元模式原理與應用詳解

瀏覽:115日期:2023-11-05 14:52:34

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

享元模式說明

定義:用于解決一個系統大量細粒度對象的共享問題:

關健詞:分離跟共享;

說明: 享元模式分單純(共享)享元模式,以及組合(不共享)享元模式,有共享跟不共享之分;單純享元模式,只包含共享的狀態,可共享狀態是不可變,不可修改的,這是享元的內部狀態;當然有外部狀態就有外部狀態,外部狀態是可變的,不被共享,這個外部狀態由客戶端來管理,是可變化的;外部狀態與內部狀態是獨立分開的,外部狀態一般作為參數傳入享元對象內,但不會影響內部狀態的值;外部狀態,一用用于獲取共享的享元對象,或多或少與內部狀態有點關聯;比如從用戶數據表中獲取數據,傳入一個外部變量用戶名,再根據這個用戶名,獲取該用戶所有對象狀態信息;

組合享元模式,配置組合模式來使用,共享部分只做個葉子節點,而組合部分是不必共享的,因為共組部分的子葉節點元素已經被緩存,組合部分相當一個分組分類的作用;

享元模式一般會與工廠模式相結合使用,用于管理緩存的創建跟維護,享元共享元素的創建一般在工廠類里創建;

享元模式主要用于對象的共享,使具有相似對象,或對象間具有太多相似細粒度的狀態,能共享已經創建的對象,減少對象的創建,減少對內存的占用,提升優化性能;

一種場景:

javascript 設計模式之享元模式原理與應用詳解

享元模式結構圖:

javascript 設計模式之享元模式原理與應用詳解

像第一張的情況,就可以使用享元模式,因為后兩排的狀態組合,可能在實體對應中,多次存在,這時就可以使用享元的共享特性,來減少對象的創建,如有相同的狀態或組合,就可以獲取緩存的狀態,減少對象重復創建,減少內存占用;

實例場景:

1>. 系統各種角色權限分配;

2>. 系統出現很多種狀態,或組合狀態需要對應的,而且這種對應,可以發生很多種其他類型對象上面的,就可以使用享元模式;

實例源碼: 單純(共享)享元

1. 自定義的 JavaScript Hashtable:

function Hashtable() { this.values = [];}Hashtable.prototype.getJson = function() {return this.values;}Hashtable.prototype.add = function(key, value) { if (!this.contain(key)) { this.values.push({key:key, value:value}); }}Hashtable.prototype.contain = function(key) { for (idx in this.values) { var json = this.values[idx]; if (json.key == key) { return true; } } return false;}Hashtable.prototype.get = function(key) { var result; for (idx in this.values) { var json = this.values[idx]; if (json.key == key) { result = json; break; } } return result;}Hashtable.prototype.delete = function(key) { for (idx in this.values) { var json = this.values[idx]; if (json.key == key) { delete this.values[idx]; break; } }}Hashtable.prototype.set = function(key, value) { if (this.contain(key)) { this.delete(key); this.values.push({key:key,value:value}); }}

2. 享元方法:

function Flyweight(one) { this.stateOne = one;}Flyweight.prototype.operate = function(){ var date = new Date(); console.log(this.stateOne + ’-’ + Math.random());};

這里可以處理傳進來的參數的一些邏輯,也可以初始化從數據庫里提取數據緩存保存;

3. 享元工廠:

function FlyweightFactory(){ var hash = new Hashtable();}FlyweightFactory.prototype.getFlyweight = function(state) { var flyweight; if (hash.contain(state)) { flyweight = hash.get(state); } else { flyweight = new Flyweight(state); hash.add(state, flyweight); } return flyweight;}

4. Client 使用:

//Clientvar factory = new FlyweightFactory();var fly1, fly2, fly3;fly1 = factory.getFlyweight(’AABB’);fly2 = factory.getFlyweight(’CCDD’);fly3 = factory.getFlyweight(’CCDD’);fly1.operate();fly2.operate();fly3.operate();

輸出:

AABB-0.8621504916809499

CCDD-0.7498800195753574

CCDD-0.7498800195753574

復合享元模式

1. 復合享元

function UnShareFlyweight() { this.state = ’’; this.hash = new Hashtable();}UnShareFlyweight.prototype.add = function(key, flyweight) { this.hash.add(key, flyweight);}UnShareFlyweight.prototype.operate = function(state) { var flag = false; /* for (idx in this.hash) { var fly = this.list[idx]; if (fly.stateOne == state) { flag = true; break; } } */ flag = this.hash.contain(state); flag ? console.log(’Exists’) : console.log(’Not Exists’);}

2. 在修改添加在享元工廠的組合方法:

function FlyweightFactory(){ var hash = new Hashtable();}FlyweightFactory.prototype.getFlyweight = function(state) { var flyweight; if (hash.contain(state)) { flyweight = hash.get(state); } else { flyweight = new Flyweight(state); hash.add(state, flyweight); } return flyweight;}FlyweightFactory.prototype.getComposite = function(list) { var unFly = new UnShareFlyweight(); var flyweight, state; for (idx in list) { state = list[idx]; flyweight = this.getFlyweight(state); unFly.add(state, flyweight); }}FlyweightFactory.prototype.print = function() { var jsons = this.hash.getJson(); for (json in jsons) { json.value.operate(); }}

3. Client 使用:

var states = [’AABB’, ’CDCD’, ’AABB’, ’CCDD’];var factory = new FlyweightFactory();factory.getComposite(states);factory.print();

輸出:

AABB-0.8749617566354573

CDCD-0.6991151459515095

CCDD-0.9891050879377872

享元模式其他說明

總體來說,享元模式用于減少對象的重復創建,用于減少內存使用,提升性能的結構型模式:

它涉及三個模式:享元模式,工廠模式,組合模式;

對于處理多對多對應而產生的一些數據緩存存儲,是一個不錯的選擇!

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

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

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

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
激情五月色综合国产精品| 亚洲激精日韩激精欧美精品| 蜜桃视频一区二区三区| 91九色精品国产一区二区| 91精品国产91久久久久久黑人| 国产成人精品一区二区三区视频 | 日本午夜精品久久久| 日韩精品一区二区三区中文在线| 亚洲精一区二区三区| 日韩精品中文字幕吗一区二区| 国产日韩欧美在线播放不卡| 久久精品国产999大香线蕉| 国产精品原创| 亚洲大片在线| 蜜臀久久99精品久久久久久9| 日本亚洲视频| 麻豆精品在线| 电影天堂国产精品| 91久久亚洲| 亚洲毛片视频| 国产精品亲子伦av一区二区三区 | 国产麻豆一区二区三区| 老鸭窝一区二区久久精品| 久久久久久婷| 免费不卡中文字幕在线| 伊人精品久久| 国产精品一区二区精品| 老司机精品视频在线播放| 亚洲www免费| 免费看的黄色欧美网站| 午夜精品影视国产一区在线麻豆| 青青草精品视频| 精品国产一区二| japanese国产精品| 亚洲我射av| 久久精品国产福利| 91高清一区| 久久黄色影视| 国产精品久久久久av电视剧| 蜜桃久久av| 免费在线亚洲| 99亚洲视频| 久久av免费看| 九一成人免费视频| 国产日韩三级| 欧美日韩一二| 日韩精品社区| 丝袜美腿一区| 日本电影久久久| 精精国产xxxx视频在线野外| 亚洲午夜免费| 成人福利av| 免费的成人av| 国产精品久久观看| 先锋影音国产一区| 国产伊人久久| 免费成人在线影院| 日韩高清欧美| 青青在线精品| 亚洲欧美伊人| 国产精品国产三级在线观看| 成人羞羞视频在线看网址| 免费不卡在线观看| 热三久草你在线| 日韩国产欧美一区二区三区| 日本精品影院| 麻豆精品av| 亚洲精一区二区三区| 久久蜜桃av| 久久永久免费| 日产欧产美韩系列久久99| 亚洲午夜黄色| 精品久久电影| 日韩影片在线观看| 精品一区在线| 水蜜桃久久夜色精品一区| 综合欧美亚洲| 蜜桃tv一区二区三区| 精品国产aⅴ| 日韩精品一区二区三区中文| 亚洲精品国产偷自在线观看| 精品色999| 日本欧美一区二区在线观看| 美女少妇全过程你懂的久久| 成人日韩av| 国产精品夜夜夜| 综合精品一区| 亚洲美洲欧洲综合国产一区| 日韩欧美精品| 久久av偷拍| 欧美中文一区| 亚洲精品1区| 久久国产日韩| 97在线精品| 国产精品美女午夜爽爽| 亚洲区第一页| 久久国产88| 伊人影院久久| 九一国产精品| 亚洲网站视频| 另类中文字幕国产精品| 成人午夜在线| 精品国产a一区二区三区v免费| 欧美日韩一区二区三区四区在线观看 | 日本一区免费网站| 最新日韩欧美| 欧美日韩国产亚洲一区| 日本午夜大片a在线观看| 国产精品对白| 国产精东传媒成人av电影| 日韩在线播放一区二区| 日韩午夜精品| 午夜精品影院| 免费黄色成人| 欧美另类综合| 免费国产自线拍一欧美视频| 亚洲欧美日本日韩| 欧美专区18| 亚洲我射av| 日韩精品久久久久久久软件91| 蜜桃91丨九色丨蝌蚪91桃色| 欧美a级一区| 好吊日精品视频| 99国内精品| 丝袜诱惑制服诱惑色一区在线观看| 99精品综合| 亚洲美洲欧洲综合国产一区| 在线一区免费观看| 免费精品视频最新在线| 亚洲精品欧洲| 蜜臀久久久久久久| 日本电影久久久| 国产精品jk白丝蜜臀av小说| 精品国产亚洲一区二区三区在线| 伊伊综合在线| 波多野结衣一区| 欧美日中文字幕| 妖精视频成人观看www| 亚洲欧美日韩专区| 亚洲精品影视| 国产欧美69| 福利片在线一区二区| 日韩啪啪电影网| 99在线精品视频在线观看| 综合国产精品| 国产日韩亚洲| 中文字幕在线视频久| 99tv成人| 天堂成人国产精品一区| 日韩欧美2区| 成人在线丰满少妇av| 免费久久精品| 青青国产精品| 欧美日韩免费观看视频| 久久午夜精品| 国产调教精品| 国产自产自拍视频在线观看| 亚洲成人免费| 欧美在线日韩| 成人美女视频| 鲁大师成人一区二区三区| 欧美日韩一区二区三区四区在线观看| 精品入口麻豆88视频| 激情综合激情| 日韩欧美中文字幕电影| 精品国产18久久久久久二百| 午夜久久免费观看| 国产图片一区| 亚洲五月婷婷| 国产日韩三级| 亚洲播播91| 亚洲精品无播放器在线播放| 精品国产中文字幕第一页| 精品成人免费一区二区在线播放| 久久亚洲精品伦理| 麻豆91精品91久久久的内涵| 免费av一区| 国产精品宾馆| 免费视频亚洲| 欧美激情久久久久久久久久久| 欧美日韩水蜜桃| 国产精品网在线观看| 一区三区视频| 成人高清一区| 日韩精品三区四区| av高清不卡| 午夜久久av| 香蕉久久精品| 久久av日韩| 只有精品亚洲| av一区在线| 国产麻豆一区二区三区精品视频| 亚洲激情黄色| 国产高潮在线| 日本aⅴ精品一区二区三区| 国产精品久久久久av电视剧| 日韩av三区| 视频一区二区三区中文字幕| 久久电影tv| 国产午夜精品一区在线观看|