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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

javascript 設(shè)計(jì)模式之享元模式原理與應(yīng)用詳解

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

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

享元模式說(shuō)明

定義:用于解決一個(gè)系統(tǒng)大量細(xì)粒度對(duì)象的共享問(wèn)題:

關(guān)健詞:分離跟共享;

說(shuō)明: 享元模式分單純(共享)享元模式,以及組合(不共享)享元模式,有共享跟不共享之分;單純享元模式,只包含共享的狀態(tài),可共享狀態(tài)是不可變,不可修改的,這是享元的內(nèi)部狀態(tài);當(dāng)然有外部狀態(tài)就有外部狀態(tài),外部狀態(tài)是可變的,不被共享,這個(gè)外部狀態(tài)由客戶端來(lái)管理,是可變化的;外部狀態(tài)與內(nèi)部狀態(tài)是獨(dú)立分開的,外部狀態(tài)一般作為參數(shù)傳入享元對(duì)象內(nèi),但不會(huì)影響內(nèi)部狀態(tài)的值;外部狀態(tài),一用用于獲取共享的享元對(duì)象,或多或少與內(nèi)部狀態(tài)有點(diǎn)關(guān)聯(lián);比如從用戶數(shù)據(jù)表中獲取數(shù)據(jù),傳入一個(gè)外部變量用戶名,再根據(jù)這個(gè)用戶名,獲取該用戶所有對(duì)象狀態(tài)信息;

組合享元模式,配置組合模式來(lái)使用,共享部分只做個(gè)葉子節(jié)點(diǎn),而組合部分是不必共享的,因?yàn)楣步M部分的子葉節(jié)點(diǎn)元素已經(jīng)被緩存,組合部分相當(dāng)一個(gè)分組分類的作用;

享元模式一般會(huì)與工廠模式相結(jié)合使用,用于管理緩存的創(chuàng)建跟維護(hù),享元共享元素的創(chuàng)建一般在工廠類里創(chuàng)建;

享元模式主要用于對(duì)象的共享,使具有相似對(duì)象,或?qū)ο箝g具有太多相似細(xì)粒度的狀態(tài),能共享已經(jīng)創(chuàng)建的對(duì)象,減少對(duì)象的創(chuàng)建,減少對(duì)內(nèi)存的占用,提升優(yōu)化性能;

一種場(chǎng)景:

javascript 設(shè)計(jì)模式之享元模式原理與應(yīng)用詳解

享元模式結(jié)構(gòu)圖:

javascript 設(shè)計(jì)模式之享元模式原理與應(yīng)用詳解

像第一張的情況,就可以使用享元模式,因?yàn)楹髢膳诺臓顟B(tài)組合,可能在實(shí)體對(duì)應(yīng)中,多次存在,這時(shí)就可以使用享元的共享特性,來(lái)減少對(duì)象的創(chuàng)建,如有相同的狀態(tài)或組合,就可以獲取緩存的狀態(tài),減少對(duì)象重復(fù)創(chuàng)建,減少內(nèi)存占用;

實(shí)例場(chǎng)景:

1>. 系統(tǒng)各種角色權(quán)限分配;

2>. 系統(tǒng)出現(xiàn)很多種狀態(tài),或組合狀態(tài)需要對(duì)應(yīng)的,而且這種對(duì)應(yīng),可以發(fā)生很多種其他類型對(duì)象上面的,就可以使用享元模式;

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

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());};

這里可以處理傳進(jìn)來(lái)的參數(shù)的一些邏輯,也可以初始化從數(shù)據(jù)庫(kù)里提取數(shù)據(jù)緩存保存;

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

復(fù)合享元模式

1. 復(fù)合享元

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

享元模式其他說(shuō)明

總體來(lái)說(shuō),享元模式用于減少對(duì)象的重復(fù)創(chuàng)建,用于減少內(nèi)存使用,提升性能的結(jié)構(gòu)型模式:

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

對(duì)于處理多對(duì)多對(duì)應(yīng)而產(chǎn)生的一些數(shù)據(jù)緩存存儲(chǔ),是一個(gè)不錯(cuò)的選擇!

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

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久不见久久见国语| 国产精品美女久久久浪潮软件| 亚洲精品麻豆| 在线亚洲国产精品网站| 老鸭窝亚洲一区二区三区| 中文字幕一区二区av| 国产欧美丝祙| 日韩在线高清| 99riav1国产精品视频| 青草国产精品| 视频在线观看91| 国产精品亚洲一区二区在线观看| 精品三级在线观看视频| 91嫩草精品| 欧美精品资源| 伊人久久大香伊蕉在人线观看热v| 日本一区二区免费高清| 激情综合自拍| 中文国产一区| 国产美女精品视频免费播放软件| 日韩欧美另类一区二区| 亚洲精品日韩久久| 国产成人精品亚洲线观看| 99国产精品| 欧美激情在线精品一区二区三区| 制服诱惑一区二区| 日韩av在线中文字幕| 中文视频一区| 日本精品影院| 久久国产欧美日韩精品| 亚洲国内精品| 国产欧美激情| 99视频在线精品国自产拍免费观看| 日韩精品成人| 性欧美xxxx免费岛国不卡电影| 国产探花在线精品| 亚洲综合丁香| 9色精品在线| 精品免费av| 蜜臀精品久久久久久蜜臀| 国产精品黑丝在线播放| 日韩av网站在线观看| 亚洲爱爱视频| 国产精品麻豆成人av电影艾秋 | 中文字幕成人| 99久久亚洲精品蜜臀| 国产精品一线天粉嫩av| 日韩在线综合| 欧美国产先锋| 日韩精品a在线观看91| 欧美日韩国产v| 国产精品入口久久| 一区二区电影| 99视频精品免费观看| 日韩天堂在线| 麻豆成人综合网| 69堂精品视频在线播放| 噜噜噜躁狠狠躁狠狠精品视频| 国产理论在线| 精品一区91| 国产亚洲人成a在线v网站| 丝袜美腿亚洲一区二区图片| 麻豆91精品视频| 日韩三级视频| 久久亚洲不卡| 欧美日韩国产探花| 日韩av免费| 水蜜桃精品av一区二区| 欧美精品不卡| 国产精品黄网站| 国产精品一区二区精品视频观看| 亚洲欧美在线综合| 午夜在线一区二区| 欧美日韩国产精品一区二区亚洲| 亚洲欧洲美洲av| 电影91久久久| 久久精品资源| 日韩一区二区三区精品| 性欧美长视频| 欧美在线亚洲综合一区| 国产91一区| 亚洲精品国产嫩草在线观看| 国产一区三区在线播放| 国产欧美日韩一区二区三区在线| 麻豆一区二区在线| 国产精品一级| 国产精品分类| 精品三区视频| 91中文字幕精品永久在线| 中文一区一区三区免费在线观| 中文字幕成人| 91精品美女| 免费看av不卡| 丰满少妇一区| 欧美黄页在线免费观看 | 欧美中文字幕| 91九色精品| 亚洲成人二区| 成人福利av| 国产一区二区三区视频在线| 国产精品亚洲综合色区韩国| 日韩国产欧美三级| 亚洲香蕉久久| 蜜臀av一区二区在线免费观看| 黄色不卡一区| 久久久夜精品| 捆绑调教日本一区二区三区| 国产精品成人一区二区网站软件| 日韩va亚洲va欧美va久久| 在线免费观看亚洲| 亚洲中字黄色| 久久香蕉精品| 亚洲久久视频| 日韩影片在线观看| 青青草国产成人99久久| 日本不卡的三区四区五区| 日韩中文字幕av电影| 国产亚洲一区在线| 久久不射中文字幕| 亚洲精品激情| 日韩欧美在线精品| 免播放器亚洲一区| 中文一区一区三区免费在线观 | 欧美韩日一区| 日本黄色精品| 成人羞羞视频播放网站| 成人美女视频| 久久精品中文| 在线日韩电影| 亚洲一区二区三区免费在线观看| 国产亚洲网站| 亚州精品视频| 国产精品一区二区av日韩在线| 国产精品高清一区二区| 荡女精品导航| 久久久久网站| 亚洲激情不卡| 欧美在线网站| 亚洲2区在线| 国产精品网站在线看| 精品午夜av| 亚洲精品一区三区三区在线观看| 99久久夜色精品国产亚洲狼| 黑丝一区二区| 亚洲乱码一区| 久久99久久久精品欧美| 国产欧美一区二区三区精品酒店| 成人羞羞视频播放网站| 日韩视频在线一区二区三区 | 久久不卡日韩美女| 精品久久久中文字幕| 91亚洲自偷观看高清| 国产精品毛片久久| 亚洲高清av| 蜜臀av一区二区在线免费观看| 日韩av中文字幕一区二区三区| 亚洲免费一区三区| 日韩一区网站| 麻豆成人综合网| 91av亚洲| 日本高清不卡一区二区三区视频 | 在线国产一区二区| 日韩高清中文字幕一区| 精品国产不卡一区二区| 五月综合激情| 日韩中文字幕视频网| 国产精品xx| 久久午夜精品一区二区| 国产精品一线| 亚洲国产影院| 亚洲精品在线国产| 免费看久久久| 欧美日韩亚洲在线观看| 在线日韩成人| 91亚洲国产成人久久精品| 99国产精品| 国产伦一区二区三区| 欧洲av一区二区| 色狠狠一区二区三区| 成人午夜亚洲| 日韩精品一卡二卡三卡四卡无卡 | 国产视频一区二| 日本免费一区二区三区四区| 亚洲性视频在线| 国产精品亚洲综合色区韩国| 久久久久.com| 久久精品72免费观看| 久久人人97超碰国产公开结果| 日韩美女国产精品| 日韩欧美一区二区三区在线观看| 中文字幕一区二区三区四区久久| 精品国产乱码久久久久久樱花| 五月天久久网站| 国产极品一区| 好吊视频一区二区三区四区| 国产精品对白久久久久粗| 黑丝一区二区三区| 久久精品九色| 免费在线看一区| 麻豆久久一区二区|