教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

掌握靜態(tài)代理

更新時間:2018年07月20日17時42分 來源: 瀏覽次數(shù):

掌握靜態(tài)代理前,先掌握什么是代理:
一、代理概念 
為某個對象提供一個代理,以控制對這個對象的訪問。 代理類和委托類有共同的父類或父接口,這樣在任何使用委托類對象的地方都可以用代理對象替代。代理類負(fù)責(zé)請求的預(yù)處理、過濾、將請求分派給委托類處理、以及委托類執(zhí)行完請求后的后續(xù)處理。 

圖1:代理模式 
 
從圖中可以看出,代理接口(Subject)、代理類(ProxySubject)、委托類(RealSubject)形成一個“品”字結(jié)構(gòu)。 
根據(jù)代理類的生成時間不同可以將代理分為靜態(tài)代理和動態(tài)代理兩種。 

下面以一個模擬需求說明靜態(tài)代理和動態(tài)代理:委托類要處理一項耗時較長的任務(wù),客戶類需要打印出執(zhí)行任務(wù)消耗的時間。解決這個問題需要記錄任務(wù)執(zhí)行前時間和任務(wù)執(zhí)行后時間,兩個時間差就是任務(wù)執(zhí)行消耗的時間。


靜態(tài)代理:
由程序員創(chuàng)建或工具生成代理類的源碼,再編譯代理類。所謂靜態(tài)也就是在程序運行前就已經(jīng)存在代理類的字節(jié)碼文件,代理類和委托類的關(guān)系在運行前就確定了
靜態(tài)代理類優(yōu)缺點 
優(yōu)點:業(yè)務(wù)類只需要關(guān)注業(yè)務(wù)邏輯本身,保證了業(yè)務(wù)類的重用性。這是代理的共有優(yōu)點。 
缺點: 
1)代理對象的一個接口只服務(wù)于一種類型的對象,如果要代理的方法很多,勢必要為每一種方法都進(jìn)行代理,靜態(tài)代理在程序規(guī)模稍大時就無法勝任了。 
2)如果接口增加一個方法,除了所有實現(xiàn)類需要實現(xiàn)這個方法外,所有代理類也需要實現(xiàn)此方法。增加了代碼維護(hù)的復(fù)雜度。
首發(fā): http://java.itcast.cn/
 

0 分享到:
和我們在線交談!