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

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

掌握靜態(tài)代理

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

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

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

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


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

0 分享到:
和我們?cè)诰€交談!