国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

javascript設計模式 ? 訪問者模式原理與用法實例分析

瀏覽:2日期:2023-11-01 17:31:23

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

介紹:訪問者模式比較復雜,它包含訪問者和被訪問元素兩個主要組成部分,這些被訪問的元素通常具有不同的類型,且不同的訪問者可以對他們進行不同的訪問操作。訪問者模式的主要目的是將數據結構與數據操作相分離。

定義:提供一個作用于某對象結構中的個元素的操作表示,它使得可以再不改變各元素的類的前提下定義作用于這些元素的新操作。訪問者模式是一種對象行為型模式

場景:使用PC結構demo來解釋下訪問者模式

示例:

var Keyboard = function(){ this.accept = function(computerPartVisitor){ computerPartVisitor.visit(this); }} var Monitor = function(){ this.accept = function(computerPartVisitor){ computerPartVisitor.visit(this); }} var Mouse = function(){ this.accept = function(computerPartVisitor){ computerPartVisitor.visit(this); }} var Computer = function(){ var parts = [new Keyboard(), new Monitor(), new Mouse()]; this.accept = function(computerPartVisitor){ computerPartVisitor.visit(this); _acceptAll(computerPartVisitor); } var _acceptAll = function(computerPartVisitor){ parts.map(function(item){ item.accept(computerPartVisitor) }); }} var ComputerPartDisplayVisitor = function(){ this.visit = function(item){ if(item.constructor == Keyboard){ console.log('Displaying Keyboard.'); }else if(item.constructor == Monitor){ console.log('Displaying Monitor.'); }else if(item.constructor == Mouse){ console.log('Displaying Mouse.'); }else if(item.constructor == Computer){ console.log('Displaying Computer.'); }else{ console.log('Error'); } }} var computer = new Computer();computer.accept(new ComputerPartDisplayVisitor());// Displaying Computer.// Displaying Keyboard.// Displaying Monitor.// Displaying Mouse.

這個模式比較復雜,我們先介紹下組成:

ComputerPartDisplayVisitor稱為訪問者,它為對象結構中的每一個具體元素例如Keyboard,Mouse等聲明一個訪問操作。當訪問Keyboard時就會輸出Displaying Keyboard。 Keyboard,Monitor,Mouse稱為元素,他們包含一個accept方法,用來觸發傳遞進來的訪問者 Computer稱為對象結構,它是一個元素的集合。parts數組用于存放元素對象,以供不同訪問者訪問。_acceptAll方法用來遍歷內部元素。 訪問者通過accept訪問元素內部,元素內部也可以通過參數調用訪問者的visit方法。這種調用機制稱為雙重分派。

訪問者模式總結:

優點:* 增加新的訪問操作便捷,只需要加一個新的訪問者類。* 將有關原色對象的訪問行為集合到一個訪問者對象中,類的職責更清晰。* 讓用戶在不修改現有元素層次結構的情況下,定義作用于該層次結構的操作。

缺點:* 增加新的元素類很困難,在訪問者模式下,每增加一個新的元素,對應要增加訪問者中的操作。* 破壞封裝。訪問者模式要求訪問者對象訪問并調用每一個元素對象的操作,這意味著元素必須暴露一些內部操作和內部狀態。

適用場景:* 一個對象結構包含多個類型的對象,希望對這些對象實施一些依賴其具體類型的操作。* 需要對一個對象結構中的對象進行橫多不同的并且不相關的操作,而且需要避免讓這些操作污染這些對象的類。* 對象結構中對象對應的類很少改變,但經常需要再次對象結構上定義新的操作。

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

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

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

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 日韩欧美一区二区精品久久 | 国产精品福利社 | 日韩经典在线观看 | 午夜宅男在线永远免费观看网 | 欧美在线综合视频 | 日本免费在线视频 | 性生活视频网站 | 欧美一级片a | 国产午夜精品理论片免费观看 | 国产日比视频 | 亚洲在线视频播放 | 欧美在线高清视频播放免费 | 我要看a级毛片 | 成年女人毛片免费播放视频m | 97香蕉久久夜色精品国产 | 欧美成人四级hd版 | 国产三级三级三级 | 日本黄色大片在线播放视频免费观看 | 成人精品视频 | f性欧美 | 美女黄网站人色视频免费国产 | 怡红院在线a男人的天堂 | 日韩中文字幕网 | 成人精品一区二区激情 | 午夜欧美 | 一级一片一a一片 | 女人张开双腿让男人 | 日本久久99 | 玖玖精品在线 | 久久在线免费 | 亚洲男人天 | 午夜嘿咻 | 伊人久久大香线焦综合四虎 | 国产精品毛片一区 | 91久久久久久久 | 亚洲高清色| 欧美成人性色大片在线观看 | 成人在线精品 | a级片在线 | 欧美一级看片a免费观看 | 亚洲欧美日本综合一区二区三区 |