JS設(shè)計(jì)模式之訪問者模式定義與用法分析
本文實(shí)例講述了JS設(shè)計(jì)模式之訪問者模式定義與用法。分享給大家供大家參考,具體如下:
在訪問者模式中,主要包括下面幾個(gè)角色
1、抽象訪問者:抽象類或者接口,聲明訪問者可以訪問哪些元素,具體到程序中就是visit方法中的參數(shù)定義哪些對象是可以被訪問的。
2、訪問者:實(shí)現(xiàn)抽象訪問者所聲明的方法,它影響到訪問者訪問到一個(gè)類后該干什么,要做什么事情。
3、抽象元素類:接口或者抽象類,聲明接受哪一類訪問者訪問,程序上是通過accept方法中的參數(shù)來定義的。抽象元素一般有兩類方法,一部分是本身的業(yè)務(wù)邏輯,另外就是允許接收哪類訪問者來訪問。
4、元素類:實(shí)現(xiàn)抽象元素類所聲明的accept方法,通常都是visitor.visit(this),基本上已經(jīng)形成一種定式了。
5、結(jié)構(gòu)對象:一個(gè)元素的容器,一般包含一個(gè)容納多個(gè)不同類、不同接口的容器,如List、Set、Map等,在項(xiàng)目中一般很少抽象出這個(gè)角色。
實(shí)現(xiàn)代碼:
// 訪問者
function Visitor() {
this.visit = function( concreteElement ) {
concreteElement.doSomething();
}
}
// 元素類
function ConceteElement() {
this.doSomething = function() {
console.log("這是一個(gè)具體元素");
}
this.accept = function( visitor ) {
visitor.visit(this);
}
}
// Client
var ele = new ConceteElement();
var v = new Visitor();
ele.accept( v );
訪問者模式的優(yōu)點(diǎn)
1、符合單一職責(zé)原則:凡是適用訪問者模式的場景中,元素類中需要封裝在訪問者中的操作必定是與元素類本身關(guān)系不大且是易變的操作,使用訪問者模式一方面符合單一職責(zé)原則,另一方面,因?yàn)楸环庋b的操作通常來說都是易變的,所以當(dāng)發(fā)生變化時(shí),就可以在不改變元素類本身的前提下,實(shí)現(xiàn)對變化部分的擴(kuò)展。
2、擴(kuò)展性良好:元素類可以通過接受不同的訪問者來實(shí)現(xiàn)對不同操作的擴(kuò)展。
訪問者模式的適用場景
1、假如一個(gè)對象中存在著一些與本對象不相干(或者關(guān)系較弱)的操作,為了避免這些操作污染這個(gè)對象,則可以使用訪問者模式來把這些操作封裝到訪問者中去。
2、假如一組對象中,存在著相似的操作,為了避免出現(xiàn)大量重復(fù)的代碼,也可以將這些重復(fù)的操作封裝到訪問者中去。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。
- javascript設(shè)計(jì)模式 – 模板方法模式原理與用法實(shí)例分析
- javascript設(shè)計(jì)模式 – 觀察者模式原理與用法實(shí)例分析
- javascript設(shè)計(jì)模式 – 狀態(tài)模式原理與用法實(shí)例分析
- javascript設(shè)計(jì)模式 – 策略模式原理與用法實(shí)例分析
- javascript設(shè)計(jì)模式 – 備忘錄模式原理與用法實(shí)例分析
- javascript設(shè)計(jì)模式 – 中介者模式原理與用法實(shí)例分析
- javascript設(shè)計(jì)模式 – 命令模式原理與用法實(shí)例分析
- javascript設(shè)計(jì)模式 – 外觀模式原理與用法實(shí)例分析
- javascript設(shè)計(jì)模式 – 裝飾模式原理與應(yīng)用實(shí)例分析
- javascript設(shè)計(jì)模式 – 組合模式原理與應(yīng)用實(shí)例分析
- JS中間件設(shè)計(jì)模式的深入探討與實(shí)例分析
- javascript設(shè)計(jì)模式 – 訪問者模式原理與用法實(shí)例分析
相關(guān)文章
JavaScript定義變量和變量優(yōu)先級(jí)問題探討
這篇文章主要介紹了JavaScript定義變量和變量優(yōu)先級(jí)的問題探討,變量的定義還有這么講究嗎,不錯(cuò),看完本文相信你會(huì)有一定的收獲,需要的朋友可以參考下2014-10-10
JS 非圖片動(dòng)態(tài)loading效果實(shí)現(xiàn)代碼
功能說明:譬如在按某個(gè)button時(shí),顯示消息"Loading”,然后每隔一秒后后面加上".",至一定數(shù)量的"."時(shí)如:"Loading...",再重置此消息為"Loading",繼續(xù)動(dòng)態(tài)顯示,直至按鈕事件處理完成。2010-04-04
OpenLayers3實(shí)現(xiàn)地圖鷹眼以及地圖比例尺的添加
這篇文章主要為大家詳細(xì)介紹了OpenLayers3實(shí)現(xiàn)地圖鷹眼以及地圖比例尺的添加,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09
通過js控制時(shí)間,一秒一秒自己動(dòng)的實(shí)例
下面小編就為大家?guī)硪黄ㄟ^js控制時(shí)間,一秒一秒自己動(dòng)的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
javascript生成json數(shù)據(jù)簡單示例分享
這篇文章主要介紹了javascript生成json數(shù)據(jù)示例,需要的朋友可以參考下2014-02-02
提交按鈕的name=''submit''引起的js失效問題及原因
這篇文章主要介紹了提交按鈕的name='submit'引起的js失效問題及原因,需要的朋友可以參考下2015-02-02
js 瀏覽器版本及版本號(hào)判斷函數(shù)2009年
這個(gè)是至2009年4月比較新的判斷瀏覽器版本的函數(shù)。js判斷瀏覽器版本及版本號(hào),本代碼支持最新的ie7,ie8,firefox2,firefox3的判斷2009-04-04

