亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

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

javascript設(shè)計(jì)模式 ? 訪問(wèn)者模式原理與用法實(shí)例分析

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

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

介紹:訪問(wèn)者模式比較復(fù)雜,它包含訪問(wèn)者和被訪問(wèn)元素兩個(gè)主要組成部分,這些被訪問(wèn)的元素通常具有不同的類(lèi)型,且不同的訪問(wèn)者可以對(duì)他們進(jìn)行不同的訪問(wèn)操作。訪問(wèn)者模式的主要目的是將數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)操作相分離。

定義:提供一個(gè)作用于某對(duì)象結(jié)構(gòu)中的個(gè)元素的操作表示,它使得可以再不改變各元素的類(lèi)的前提下定義作用于這些元素的新操作。訪問(wèn)者模式是一種對(duì)象行為型模式

場(chǎng)景:使用PC結(jié)構(gòu)demo來(lái)解釋下訪問(wèn)者模式

示例:

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.

這個(gè)模式比較復(fù)雜,我們先介紹下組成:

ComputerPartDisplayVisitor稱(chēng)為訪問(wèn)者,它為對(duì)象結(jié)構(gòu)中的每一個(gè)具體元素例如Keyboard,Mouse等聲明一個(gè)訪問(wèn)操作。當(dāng)訪問(wèn)Keyboard時(shí)就會(huì)輸出Displaying Keyboard。 Keyboard,Monitor,Mouse稱(chēng)為元素,他們包含一個(gè)accept方法,用來(lái)觸發(fā)傳遞進(jìn)來(lái)的訪問(wèn)者 Computer稱(chēng)為對(duì)象結(jié)構(gòu),它是一個(gè)元素的集合。parts數(shù)組用于存放元素對(duì)象,以供不同訪問(wèn)者訪問(wèn)。_acceptAll方法用來(lái)遍歷內(nèi)部元素。 訪問(wèn)者通過(guò)accept訪問(wèn)元素內(nèi)部,元素內(nèi)部也可以通過(guò)參數(shù)調(diào)用訪問(wèn)者的visit方法。這種調(diào)用機(jī)制稱(chēng)為雙重分派。

訪問(wèn)者模式總結(jié):

優(yōu)點(diǎn):* 增加新的訪問(wèn)操作便捷,只需要加一個(gè)新的訪問(wèn)者類(lèi)。* 將有關(guān)原色對(duì)象的訪問(wèn)行為集合到一個(gè)訪問(wèn)者對(duì)象中,類(lèi)的職責(zé)更清晰。* 讓用戶(hù)在不修改現(xiàn)有元素層次結(jié)構(gòu)的情況下,定義作用于該層次結(jié)構(gòu)的操作。

缺點(diǎn):* 增加新的元素類(lèi)很困難,在訪問(wèn)者模式下,每增加一個(gè)新的元素,對(duì)應(yīng)要增加訪問(wèn)者中的操作。* 破壞封裝。訪問(wèn)者模式要求訪問(wèn)者對(duì)象訪問(wèn)并調(diào)用每一個(gè)元素對(duì)象的操作,這意味著元素必須暴露一些內(nèi)部操作和內(nèi)部狀態(tài)。

適用場(chǎng)景:* 一個(gè)對(duì)象結(jié)構(gòu)包含多個(gè)類(lèi)型的對(duì)象,希望對(duì)這些對(duì)象實(shí)施一些依賴(lài)其具體類(lèi)型的操作。* 需要對(duì)一個(gè)對(duì)象結(jié)構(gòu)中的對(duì)象進(jìn)行橫多不同的并且不相關(guān)的操作,而且需要避免讓這些操作污染這些對(duì)象的類(lèi)。* 對(duì)象結(jié)構(gòu)中對(duì)象對(duì)應(yīng)的類(lèi)很少改變,但經(jīng)常需要再次對(duì)象結(jié)構(gòu)上定義新的操作。

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

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《javascript面向?qū)ο笕腴T(mén)教程》、《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)文章:
主站蜘蛛池模板: 精品久久久久久久久久香蕉 | 久久青草网站 | 日韩成人三级 | 91精品一区国产高清在线 | 免费一级肉体全黄毛片高清 | 午夜手机视频 | 国产一国产一有一级毛片 | 日韩欧美理论 | 国产亚洲综合在线 | 69成人做爰视频69 | 欧美在线播放视频 | 自怕偷自怕亚洲精品 | 日韩欧美视频一区二区 | 欧美在线一区二区 | 久久精品视频免费在线观看 | 亚洲欧洲一级 | 中国做爰国产精品视频 | 三级理论手机在线观看视频 | 国产高清在线精品 | 成年人视频在线免费播放 | 亚洲免费一级视频 | 国产精品久久大陆 | 日本成人在线看 | 亚洲男人的天堂在线 | 中文字幕一二三区乱码老 | 午夜亚洲国产成人不卡在线 | 成人国产精品一区二区网站 | 亚洲一区二区免费视频 | 美女毛片在线观看 | 在线免费亚洲 | 久青草免费视频手机在线观看 | 国产日韩精品一区二区在线观看 | 国产美女视频黄a视频全免费网站 | 日韩一区二区视频在线观看 | 亚洲视频在线观看免费视频 | 亚洲人成人毛片无遮挡 | 亚洲人成在线播放网站 | 欧美视频一区二区三区在线观看 | 成人a毛片免费全部播放 | 精品久久久久久国产91 | 黄色a网|