javascript設(shè)計(jì)模式 – 代理模式原理與用法實(shí)例分析
本文實(shí)例講述了javascript設(shè)計(jì)模式 – 代理模式原理與用法。分享給大家供大家參考,具體如下:
介紹:代理使我們很常見的一眾模式,proxy,nginx都稱之為代理,代理是什么意思呢?代理模式在客戶端和目標(biāo)對(duì)象之間加入一個(gè)新的代理對(duì)象,代理對(duì)象起到一個(gè)中介作用,去掉客戶不能看到的內(nèi)容和服務(wù),或者增添客戶需要的額外服務(wù)。
定義:給某一個(gè)對(duì)象提供一個(gè)代理,并由代理對(duì)象控制對(duì)原對(duì)象的引用。代理模式是一種對(duì)象結(jié)構(gòu)型模式。
場(chǎng)景:我們還是以畫圖形為例,我將所有的繪圖動(dòng)作包裝到Shape類中,使用代理模式來(lái)部分開放功能給客戶。
示例:
var Shape = function(color){
console.log('創(chuàng)建了一個(gè)對(duì)象');
this.color = color;
this.x;
this.y;
this.radius;
this.setAttr = function(x, y, radius){
this.x = x;
this.y = y;
this.radius = radius;
}
this.drawCircle = function(){
console.log('畫圓: 顏色:' + this.color + ' x:' + this.x + ' y:' + this.y + ' radius:' + this.radius)
}
this.drawSquare = function(){
console.log('畫方: 顏色:' + this.color + ' x:' + this.x + ' y:' + this.y )
}
this.drawTriangle = function(){
console.log('畫三角: 顏色:' + this.color + ' x:' + this.x + ' y:' + this.y )
}
}
var proxyShape = function(color, x, y, radius){
this.color = color;
this.x = x;
this.y = y;
this.radius = radius;
this.shape = null;
this.drawSquare = function(){
if(this.shape === null){
this.shape = new Shape(this.color);
this.shape.setAttr(this.x, this.y, this.radius);
}
this.shape.drawSquare();
}
}
var square = new proxyShape('red', 10, 10);
square.drawSquare();
square.drawSquare();
// 創(chuàng)建了一個(gè)對(duì)象
// 畫方: 顏色:red x:10 y:10
// 畫方: 顏色:red x:10 y:10
你可以在proxyShape中增加一些日志,權(quán)限等任務(wù)。因?yàn)榇眍惖拇嬖?,新增的任?wù)不會(huì)影響到Shape類。
代理模式為對(duì)象的簡(jiǎn)介訪問(wèn)提供了解決方案,可以對(duì)對(duì)象的訪問(wèn)進(jìn)行控制。
代理模式總結(jié):
優(yōu)點(diǎn):
* 代理模式可以協(xié)調(diào)調(diào)用者和被調(diào)用這,一定程度降低了系統(tǒng)耦合度。
缺點(diǎn):
* 由于增加了代理對(duì)象,因此有些類型的代理模式可能會(huì)造成請(qǐng)求的處理速度變慢。
* 實(shí)現(xiàn)代理模式需要額外的工作,有些代理模式的實(shí)現(xiàn)非常復(fù)雜。
適用場(chǎng)景:
* 當(dāng)客戶端需要訪問(wèn)遠(yuǎn)程主機(jī)中的對(duì)象時(shí),可以使用遠(yuǎn)程代理。
* 當(dāng)需要用一個(gè)消耗資源較少的對(duì)象來(lái)代表資源消耗較多的對(duì)象,可以使用虛擬代理
* 當(dāng)需要控制一個(gè)對(duì)象的訪問(wèn),為不同用戶提供不同級(jí)別的訪問(wèn)權(quán)限時(shí)可以使用保護(hù)代理
感興趣的朋友可以使用在線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ì)有所幫助。
相關(guān)文章
javascript獲取wx.config內(nèi)部字段解決微信分享
這篇文章主要介紹了javascript獲取wx.config內(nèi)部字段解決微信分享,需要的朋友可以參考下2016-03-03
JavaScript簡(jiǎn)單實(shí)現(xiàn)彈出拖拽窗口(二)
這篇文章再次為大家詳細(xì)介紹了JavaScript簡(jiǎn)單實(shí)現(xiàn)彈出拖拽窗口的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
Layui實(shí)現(xiàn)帶查詢條件的分頁(yè)
這篇文章主要為大家詳細(xì)介紹了Layui實(shí)現(xiàn)帶查詢條件的分頁(yè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
簡(jiǎn)易的投票系統(tǒng)以及js刷票思路和方法
這篇文章主要介紹了簡(jiǎn)易的投票系統(tǒng)以及js刷票思路和方法,文章十分的詳盡,思路也很清晰,是篇非常不錯(cuò)的文章,這里推薦給大家,有需要的小伙伴可以參考下。2015-04-04
uniapp?實(shí)現(xiàn)自定義縮略滾動(dòng)條效果
這篇文章主要介紹了uniapp?實(shí)現(xiàn)自定義縮略滾動(dòng)條,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-08-08
wavesurfer.js繪制音頻波形圖的實(shí)現(xiàn)
這篇文章主要介紹了wavesurfer.js繪制音頻波形圖的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
JavaScript中內(nèi)存泄漏的介紹與教程(推薦)
內(nèi)存泄露是指一塊被分配的內(nèi)存既不能使用,又不能回收,直到瀏覽器進(jìn)程結(jié)束。下面這篇文章主要給的大家介紹了關(guān)于JavaScript中內(nèi)存泄漏的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06

