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

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

javascript設計模式 ? 職責鏈模式原理與用法實例分析

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

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

介紹:很多情況下,在一個軟件系統中可以處理某個請求的對象不止一個。例如一個網絡請求過來,需要有對象去解析request Body,需要有對象去解析請求頭,還需要有對象去對執行對應controller。請求一層層傳遞,讓每一個對象都基于請求完成自己的任務,然后將請求傳遞給下一個處理程序。是不是感覺有點中間件的感覺。

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

場景:我們繼續畫圓,我們準備了兩組示例:

示例:

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(’畫一個超小的圓( 5以下 )’); } this.drawSmalCircle = function(){ console.log(’畫一個小圓( 5-10 )’); } this.drawMediumCircle = function(){ console.log(’畫一個中圓 ( 10-15 )’); } this.drawBigCircle = function(){ console.log(’畫一個大圓 ( 15-20 )’); } this.drawVeryBigCircle = function(){ console.log(’畫一個超大的圓 ( 20以上 )’); }} var circle = new Circle();circle.drawByRadius(30);//畫一個超大的圓 ( 20以上 )

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

我們使用職責鏈模式重寫下:

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(’執行:drawSmalCircle’); if(this.min < radius && radius < this.max){ console.log(’畫一個小圓( 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(’執行:drawMediumCircle’); if(this.min < radius && radius < this.max){ console.log(’畫一個中圓 ( 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(’執行:drawBigCircle’); if(this.min < radius && radius < this.max){ console.log(’畫一個大圓 ( 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)// 執行:drawSmalCircle// 執行:drawMediumCircle// 執行:drawBigCircle// 畫一個大圓 ( 20以上 circle.draw(15)// 執行:drawSmalCircle// 執行:drawMediumCircle// 畫一個中圓 ( 10-20 )// 執行:drawBigCirclecircle.draw(5)// 執行:drawSmalCircle// 畫一個小圓( 10以下 )// 執行:drawMediumCircle// 執行:drawBigCircle

以上就是職責鏈模式的實例代碼,drawSmalCircle,drawMediumCircle,drawBigCircle稱為處理者類,處理者類保存了下一級對象的引用,

當我每執行一次draw時,程序會挨個執行職責鏈上的每一個方法。

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

職責鏈模式總結:

優點:* 降低耦合,互相都不清楚執行順序以及執行處理的類。* 請求對象僅需維持一個指向其后繼者的引用,簡化了對象的相互連接。* 新增修改職責鏈結構方便,滿足開關原則。

缺點:* 由于沒有明確接受者,可能職責鏈走到最后都沒有被正確處理。* 職責鏈較長時會導致系統性能受影響。* 建鏈不當,會造成循環調用,導致系統陷入死循環。

適用場景:* 多個對象處理同一請求* 動態創建執行順序,流程

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

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

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

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品xvideos88| 奇米色欧美一区二区三区| 中文一区一区三区免费在线观| 久久国产直播| 日本一区二区高清不卡| 国产欧美一区二区色老头| 国产精品亚洲一区二区在线观看| 中日韩男男gay无套| 婷婷综合一区| 欧美日韩一区二区三区视频播放| 日韩三级久久| 午夜日韩av| 欧美天堂在线| 午夜在线一区| 欧美日韩四区| 欧美高清不卡| 蜜臀久久99精品久久一区二区| 欧美国产美女| 日韩理论视频| 91精品一区二区三区综合| 日本一区二区免费高清| 欧美国产先锋| 亚洲精品成a人ⅴ香蕉片| 久久亚洲国产精品一区二区| 欧美 日韩 国产精品免费观看| 日韩动漫一区| 丝袜脚交一区二区| 福利一区和二区| 美国三级日本三级久久99| 免费av一区| 国产一区二区三区不卡视频网站| 亚洲天堂日韩在线| 99成人在线| 桃色一区二区| 国产成人免费| 国产欧美日韩影院| 天堂精品久久久久| 欧美肉体xxxx裸体137大胆| 精品中文字幕一区二区三区四区| 欧美一区二区三区久久| 婷婷综合电影| 午夜亚洲福利| 日韩欧美中文字幕在线视频| 激情综合自拍| 欧美久久精品一级c片| 日韩毛片在线| 日韩欧美精品| 精品在线播放| 一区三区视频| 久久不射网站| 午夜在线视频观看日韩17c| 亚洲一级高清| 日本韩国欧美超级黄在线观看| 精品国产亚洲一区二区在线观看| 国产激情精品一区二区三区| 久久av免费看| 久久久久伊人| 伊伊综合在线| 欧美日韩少妇| 免费视频一区二区| 久久国产尿小便嘘嘘| 麻豆久久久久久久| 色偷偷色偷偷色偷偷在线视频| 亚洲91精品| 乱人伦精品视频在线观看| 日韩av影院| 97精品国产福利一区二区三区| 国产精品久久| 国产一区一一区高清不卡| 日韩免费久久| 亚洲久久视频| 精品色999| 亚洲免费高清| 精品日韩一区| 国产精品婷婷| 美女性感视频久久| 国产精品97| 久久久久黄色| 久久激情综合网| 日韩精品一区二区三区免费观看| 一区在线免费观看| 美女久久精品| 在线午夜精品| 成人午夜网址| 日韩精品久久久久久久软件91| 狠狠久久伊人| 日韩va亚洲va欧美va久久| 激情欧美亚洲| 久久av综合| 亚洲精品国产精品粉嫩| 国产成人精品亚洲日本在线观看| 婷婷成人av| 性色一区二区| 久久网站免费观看| 亚洲黄页一区| 你懂的亚洲视频| 日本亚州欧洲精品不卡| 狠狠躁少妇一区二区三区| 日本强好片久久久久久aaa| 欧美精品一二| 亚洲手机视频| 久久一区国产| 国产精品毛片久久久| 亚洲天堂免费| 99xxxx成人网| 免费国产自线拍一欧美视频| 亚洲高清av| 亚洲国产专区校园欧美| 久久久久久久久久久妇女 | 福利一区二区| 婷婷精品在线观看| 最近国产精品视频| 日韩毛片网站| 国产亚洲久久| 老司机精品视频网| а√在线中文在线新版| 日本久久成人网| 亚洲激情精品| 亚洲在线一区| 蜜桃av一区二区| 日韩制服丝袜先锋影音| 久久午夜精品一区二区| 老牛国产精品一区的观看方式| 91九色精品国产一区二区| 精品一区毛片| 国产亚洲欧洲| **爰片久久毛片| 韩国久久久久久| 精品一区欧美| 日韩av资源网| 日韩在线综合| 深夜福利亚洲| 精品国产亚洲一区二区三区大结局| 成人在线免费观看91| 999久久久91| 在线一区二区三区视频| 国产一区二区精品福利地址| 国产精品毛片在线| 国产欧美一区二区三区精品观看 | 亚洲精品婷婷| 欧美国产专区| 91九色精品| 久久av导航| 亚洲天堂免费| 日韩国产网站| 91久久精品无嫩草影院| 亚洲伊人av| 日韩精品免费一区二区夜夜嗨| 色爱综合网欧美| 亚洲综合小说| 色婷婷久久久| 国产精品jk白丝蜜臀av小说| 黄色精品网站| 精品在线网站观看| 亚洲精品看片| 国产二区精品| 欧美精品高清| 国产毛片精品| 欧美一级一区| 亚洲网址在线观看| 日韩中文字幕高清在线观看| 亚洲精选av| 亚洲精品一区二区妖精| 99久久99视频只有精品| 精品国产一区二| 欧美精品福利| 日本一不卡视频| 综合激情一区| 亚洲v在线看| 91tv亚洲精品香蕉国产一区| 精品欧美日韩精品| 国产精品22p| 国产精品xxxav免费视频| 日韩激情综合| 五月亚洲婷婷| 日本亚洲视频| 视频精品一区| 亚洲免费一区三区| 日韩精品五月天| 麻豆精品蜜桃视频网站| 国产一区二区三区国产精品| 欧美精品第一区| 久久精品五月| 国际精品欧美精品| 久久裸体视频| 日韩中文字幕麻豆| 欧美精品观看| 精品一区二区三区免费看| 国产一区二区三区亚洲综合| 麻豆一区二区99久久久久| 日韩精品一区二区三区免费观看| 黄色在线一区| 国产欧美精品久久| 中文在线资源| 综合精品一区| 成人国产精品一区二区网站| 啪啪国产精品| 日本免费新一区视频| 国产亚洲高清一区| 国产一区清纯|