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

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

javascript設(shè)計(jì)模式 ? 職責(zé)鏈模式原理與用法實(shí)例分析

瀏覽:174日期:2023-11-03 16:36:36

本文實(shí)例講述了javascript設(shè)計(jì)模式 ? 職責(zé)鏈模式原理與用法。分享給大家供大家參考,具體如下:

介紹:很多情況下,在一個(gè)軟件系統(tǒng)中可以處理某個(gè)請(qǐng)求的對(duì)象不止一個(gè)。例如一個(gè)網(wǎng)絡(luò)請(qǐng)求過來,需要有對(duì)象去解析request Body,需要有對(duì)象去解析請(qǐng)求頭,還需要有對(duì)象去對(duì)執(zhí)行對(duì)應(yīng)controller。請(qǐng)求一層層傳遞,讓每一個(gè)對(duì)象都基于請(qǐng)求完成自己的任務(wù),然后將請(qǐng)求傳遞給下一個(gè)處理程序。是不是感覺有點(diǎn)中間件的感覺。

定義:職責(zé)鏈就是避免請(qǐng)求發(fā)送者與接收者耦合在一起,讓多個(gè)對(duì)象都有可能接收請(qǐng)求。將這些對(duì)象連成一條鏈,并沿著鏈傳遞請(qǐng)求,直到有對(duì)象處理它為止。職責(zé)鏈模式是一種對(duì)象行為型模式。

場(chǎng)景:我們繼續(xù)畫圓,我們準(zhǔn)備了兩組示例:

示例:

var Circle = function(){ this.radius = 0; this.drawByRadius = function(radius){ if(radius < 5){ this.drawVerySmalCircle(); }else if(radius < 10){ this.drawSmalCircle(); }else if(radius < 15){ this.drawMediumCircle(); }else if(radius < 20){ this.drawBigCircle(); }else{ this.drawVeryBigCircle(); } } this.drawVerySmalCircle = function(){ console.log(’畫一個(gè)超小的圓( 5以下 )’); } this.drawSmalCircle = function(){ console.log(’畫一個(gè)小圓( 5-10 )’); } this.drawMediumCircle = function(){ console.log(’畫一個(gè)中圓 ( 10-15 )’); } this.drawBigCircle = function(){ console.log(’畫一個(gè)大圓 ( 15-20 )’); } this.drawVeryBigCircle = function(){ console.log(’畫一個(gè)超大的圓 ( 20以上 )’); }} var circle = new Circle();circle.drawByRadius(30);//畫一個(gè)超大的圓 ( 20以上 )

觀察上面的代碼,這是很常見的邏輯,通過參數(shù)來決定執(zhí)行哪個(gè)方法。首先drawByRadius方法職責(zé)過重,其次這樣的方式在修改,新增時(shí)需要修改源代碼,不符合開關(guān)原則。

我們使用職責(zé)鏈模式重寫下:

var drawSmalCircle = function(min,max){ this.max = max; this.min = min; this.nextCircle; this.setNextDraw = function(circle){ this.nextCircle = circle; } this.draw = function(radius){ console.log(’執(zhí)行:drawSmalCircle’); if(this.min < radius && radius < this.max){ console.log(’畫一個(gè)小圓( 10以下 )’); } if(this.nextCircle){ this.nextCircle.draw(radius) } }} var drawMediumCircle = function(min,max){ this.max = max; this.min = min; this.nextCircle; this.setNextDraw = function(circle){ this.nextCircle = circle; } this.draw = function(radius){ console.log(’執(zhí)行:drawMediumCircle’); if(this.min < radius && radius < this.max){ console.log(’畫一個(gè)中圓 ( 10-20 )’); } if(this.nextCircle){ this.nextCircle.draw(radius) } }} var drawBigCircle = function(min,max){ this.max = max; this.min = min; this.nextCircle; this.setNextDraw = function(circle){ this.nextCircle = circle; } this.draw = function(radius){ console.log(’執(zhí)行:drawBigCircle’); if(this.min < radius && radius < this.max){ console.log(’畫一個(gè)大圓 ( 20以上 )’); } if(this.nextCircle){ this.nextCircle.draw(radius) } }} function initChain(){ var smalCircle = new drawSmalCircle(0,10); var mediumCircle = new drawMediumCircle(10,20); var bigCircle = new drawBigCircle(20,100); smalCircle.setNextDraw(mediumCircle); mediumCircle.setNextDraw(bigCircle); return smalCircle;} var circle = initChain();circle.draw(30)// 執(zhí)行:drawSmalCircle// 執(zhí)行:drawMediumCircle// 執(zhí)行:drawBigCircle// 畫一個(gè)大圓 ( 20以上 circle.draw(15)// 執(zhí)行:drawSmalCircle// 執(zhí)行:drawMediumCircle// 畫一個(gè)中圓 ( 10-20 )// 執(zhí)行:drawBigCirclecircle.draw(5)// 執(zhí)行:drawSmalCircle// 畫一個(gè)小圓( 10以下 )// 執(zhí)行:drawMediumCircle// 執(zhí)行:drawBigCircle

以上就是職責(zé)鏈模式的實(shí)例代碼,drawSmalCircle,drawMediumCircle,drawBigCircle稱為處理者類,處理者類保存了下一級(jí)對(duì)象的引用,

當(dāng)我每執(zhí)行一次draw時(shí),程序會(huì)挨個(gè)執(zhí)行職責(zé)鏈上的每一個(gè)方法。

職責(zé)鏈模式分為純職責(zé)鏈和不純職責(zé)鏈,純的職責(zé)鏈在處理請(qǐng)求時(shí),只能選擇全部處理不傳遞或者全部傳遞不處理。我們這里的例子就是不純職責(zé)鏈。它允許處理完成后繼續(xù)向后傳遞。

職責(zé)鏈模式總結(jié):

優(yōu)點(diǎn):* 降低耦合,互相都不清楚執(zhí)行順序以及執(zhí)行處理的類。* 請(qǐng)求對(duì)象僅需維持一個(gè)指向其后繼者的引用,簡化了對(duì)象的相互連接。* 新增修改職責(zé)鏈結(jié)構(gòu)方便,滿足開關(guān)原則。

缺點(diǎn):* 由于沒有明確接受者,可能職責(zé)鏈走到最后都沒有被正確處理。* 職責(zé)鏈較長時(shí)會(huì)導(dǎo)致系統(tǒng)性能受影響。* 建鏈不當(dāng),會(huì)造成循環(huán)調(diào)用,導(dǎo)致系統(tǒng)陷入死循環(huán)。

適用場(chǎng)景:* 多個(gè)對(duì)象處理同一請(qǐng)求* 動(dòng)態(tài)創(chuàng)建執(zhí)行順序,流程

感興趣的朋友可以使用在線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中文| 老牛国内精品亚洲成av人片| 国产情侣一区在线| 亚洲免费毛片| 日韩av三区| 国产精品极品| 精品一级视频| 亚洲伊人av| 欧美日韩激情在线一区二区三区| 国产综合亚洲精品一区二| 欧美1区免费| 91久久中文| 综合一区在线| 国产精品麻豆成人av电影艾秋| 麻豆国产欧美日韩综合精品二区| 国产精品多人| 水蜜桃久久夜色精品一区| 美女网站视频一区| 久久青草久久| 国产日韩专区| 欧美亚洲一区二区三区| 精品精品久久| 久久久久网站| 综合一区av| 欧美交a欧美精品喷水| 亚洲天堂av影院| 亚洲少妇一区| 青草久久视频| 超碰成人av| 日韩一区二区久久| 欧美天堂一区| 国产盗摄——sm在线视频| 五月综合激情| 中文久久精品| 国产欧美综合一区二区三区| 91亚洲国产高清| 午夜精品免费| 日本aⅴ精品一区二区三区 | 国产精品99久久精品| 99精品视频在线| 免费在线观看一区二区三区| 国产探花一区在线观看| 亚洲美女久久精品| 亚洲在线国产日韩欧美| 欧美一级全黄| 99久久精品网| 日韩二区三区在线观看| xxxxx性欧美特大| 久热综合在线亚洲精品| 国产精品对白| 在线视频亚洲| 国产精品极品| 午夜久久免费观看| 国产麻豆一区| 影音先锋久久| 精品国产精品国产偷麻豆| 一区久久精品| 鲁大师精品99久久久| 夜夜嗨一区二区三区| 欧美一区久久| 国产综合婷婷| 久久字幕精品一区| 久久福利影视| 亚洲人成在线网站| 日韩激情网站| 日韩视频免费| 精品72久久久久中文字幕| 免费一级片91| 精品国模一区二区三区| 国产麻豆精品久久| 美女日韩在线中文字幕| 日本不卡免费高清视频在线| 亚洲精品极品| 久久亚洲国产| 国产精品久久国产愉拍| 每日更新成人在线视频| 不卡一二三区| 国产欧美91| 日韩中文字幕1| 国产精品原创| 国产精品主播在线观看| 亚洲一区亚洲| 色综合www| 麻豆一区在线| 日韩精品亚洲aⅴ在线影院| 日韩亚洲精品在线| 黑人精品一区| 精品视频免费| 欧美日韩亚洲一区在线观看| 99亚洲视频| 久久国产欧美| 欧美激情另类| 另类小说一区二区三区| 青草综合视频| 亚洲视频二区| 日韩午夜电影| 亚洲大片在线| 日韩毛片在线| 黄色aa久久| 麻豆91小视频| 国产精品magnet| 7m精品国产导航在线| 综合激情视频| 石原莉奈一区二区三区在线观看| 日韩精品首页| 黄毛片在线观看| 日韩av有码| 成人亚洲一区| 国产一区二区三区四区| 久久av超碰| 久久国产生活片100| 欧美亚洲三级| 国产精品一区二区三区av| 欧美日一区二区在线观看| 亚洲ww精品| 日本亚洲欧洲无免费码在线| 视频一区二区三区中文字幕| 夜夜精品视频| 99热精品在线观看| 婷婷亚洲五月色综合| 91精品国产乱码久久久久久久| 日韩成人综合| 91精品亚洲| 国产免费成人| 亚洲天堂免费| 日韩精品高清不卡| 国产欧美日韩一区二区三区在线| 欧美精品三级在线| 国产精品tv| 成人在线黄色| 亚洲成人不卡| 国产精品7m凸凹视频分类| 欧美不卡视频| 在线视频精品| 蜜桃一区二区三区在线观看| 视频一区二区中文字幕| 人人爽香蕉精品| 深夜福利亚洲| 欧美偷窥清纯综合图区| 国产精品一区二区三区四区在线观看| 国产麻豆一区二区三区精品视频| 国产精品免费大片| 美女在线视频一区| 日本精品黄色| 亚洲h色精品| 精品1区2区3区4区| 综合亚洲视频| 国产精品1luya在线播放| 久久99国产精品视频| 久久97视频| 成人午夜精品| 亚洲欧洲另类| 日本a口亚洲| 精品淫伦v久久水蜜桃| 日韩av福利| 亚洲专区一区| 国产欧美一区二区三区国产幕精品| 精品深夜福利视频| 激情综合在线| 欧美亚洲免费| 日韩激情一区| 香蕉久久国产| 国产精品久久久久久模特| 日韩一区二区在线免费| 黄色亚洲大片免费在线观看| 天堂va欧美ⅴa亚洲va一国产| 国产精品s色| 91精品国产成人观看| 亚洲tv在线| 精品国产鲁一鲁****| 欧美在线亚洲| 久久gogo国模啪啪裸体| 国产综合亚洲精品一区二| 日本va欧美va瓶| 免费看av不卡| 日韩综合小视频| 日韩精品永久网址| 亚洲一二av| 国产在线看片免费视频在线观看| 不卡视频在线| 国产精品美女久久久久久不卡| 国产在线|日韩| 日本综合精品一区| 国产精品99视频| 中文无码日韩欧| 91亚洲国产高清| 日本不卡不码高清免费观看| 人在线成免费视频| 日韩精品视频在线看| 欧美日韩精品免费观看视欧美高清免费大片| 久热精品在线| 国产精品久久久久久久久久10秀 | 午夜在线视频观看日韩17c| 国产麻豆一区| 亚洲一区二区免费看| 国产一区二区三区日韩精品| 首页亚洲欧美制服丝腿|