JavaScript設計模式經典之代理模式
代理模式的定義是把對一個物件的訪問, 交給另一個代理物件來操作.
舉一個例子, 我在追一個MM想給她送一束花,但是我因為我性格比較靦腆,所以我託付了MM的一個好朋友來送。
這個例子不是非常好, 至少我們沒看出代理模式有什麼大的用處,因為追MM更好的方式是送一臺寶馬。
再舉個例子,假如我每天都得寫工作日報( 其實沒有這麼慘 ). 我的日報最後會讓總監審閱. 如果我們都直接把日報發給 總監 , 那可能 總監 就沒法工作了. 所以通常的做法是把日報發給我的組長 , 組長把所有組員一週的日報都彙總後再發給總監 .
實際的程式設計中, 這種因為效能問題使用代理模式的機會是非常多的。比如頻繁的訪問dom節點, 頻繁的請求遠端資源. 可以把操作先存到一個緩衝區, 然後自己選擇真正的觸發時機.
再來個詳細的例子,之前我寫了一個街頭霸王的遊戲, 地址在
遊戲中需要接受鍵盤的事件, 來完成相應動作.
於是我寫了一個keyManage類. 其中在遊戲主執行緒裡監聽keyManage的變化.
var keyMgr = keyManage();
keyMgr.listen( ”change’, function( keyCode ){
console.log( keyCode );
});
圖片裡面隆正在放升龍拳, 升龍拳的操作是前下前+拳. 但是這個keyManage類只要發生鍵盤事件就會觸發之前監聽的change函式. 這意味著永遠只能取得前,後,前,拳這樣單獨的按鍵事件,而無法得到一個按鍵組合。
好吧,我決定改寫我的keyManage類, 讓它也支援傳遞按鍵組合. 但是如果我以後寫個html5版雙截龍,意味著我每次都得改寫keyManage. 我總是覺得, 這種函式應該可以抽象成一個更底層的方法, 讓任何遊戲都可以用上它.
所以最後的keyManage只負責對映鍵盤事件. 而隆接受到的動作是透過一個代理物件處理之後的.
var keyMgr = keyManage();
keyMgr.listen( ”change’, proxy( function( keyCode ){
console.log( keyCode ); //前下前+拳
)} );
至於proxy裡面怎麼實現,完全可以自由發揮。
還有個例子就是在呼叫ajax請求的時候,無論是各種開源庫,還是自己寫的Ajax類, 都會給xhr物件設定一個代理. 我們不可能頻繁的去操作xhr物件發請求, 而應該是這樣.
var request = Ajax.get( ‘cgi.xx.com/xxx’ );
request.send();
request.done(function(){
});
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/75/viewspace-2803509/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript設計模式經典之策略模式JavaScript設計模式
- JavaScript設計模式經典之觀察者模式JavaScript設計模式
- JavaScript設計模式經典之單例模式JavaScript設計模式單例
- JavaScript設計模式經典之介面卡模式JavaScript設計模式
- Javascript設計模式之代理模式JavaScript設計模式
- JavaScript設計模式經典之簡單工廠模式JavaScript設計模式
- JavaScript設計模式經典之外觀模式JavaScript設計模式
- javascript設計模式 之 3代理模式JavaScript設計模式
- Javascript設計模式(五)代理模式JavaScript設計模式
- 《設計模式》之代理模式設計模式
- 【設計模式之代理模式】設計模式
- 設計模式之代理模式設計模式
- 設計模式之禪之代理模式設計模式
- Java設計模式之代理模式Java設計模式
- 設計模式系列之「代理模式」設計模式
- 設計模式之代理設計模式
- JavaScript設計模式與實踐--代理模式JavaScript設計模式
- Java設計模式-之代理模式(動態代理)Java設計模式
- 設計模式之代理模式(proxy pattern)設計模式
- 23天設計模式之代理模式設計模式
- Java設計模式之(五)——代理模式Java設計模式
- C++設計模式之代理模式C++設計模式
- 設計模式漫談之代理模式設計模式
- Java設計模式之代理模式(Proxy)Java設計模式
- 我學設計模式 之 代理模式設計模式
- C++設計模式之Proxy模式(代理模式)C++設計模式
- 23種設計模式之代理模式(靜態代理)設計模式
- Javascript設計模式之命令模式JavaScript設計模式
- JavaScript 設計模式之策略模式JavaScript設計模式
- Javascript設計模式之策略模式JavaScript設計模式
- 設計模式之代理模式(結構型)設計模式
- 12.java設計模式之代理模式Java設計模式
- JAVA設計模式之 代理模式【Proxy Pattern】Java設計模式
- C#設計模式之代理模式(四)C#設計模式
- C#設計模式之代理模式(三)C#設計模式
- C#設計模式之代理模式(二)C#設計模式
- C#設計模式之代理模式(一)C#設計模式
- JavaScript設計模式之建立型設計模式JavaScript設計模式