動態(tài)代理模式

動態(tài)代理模式屬于比較困難的一個設(shè)計模式什荣。
開發(fā)中用到的很少港令,因為動態(tài)代理模式的應(yīng)用場景是搭建框架粥诫,對于大部分人而言能用就可以了恭理,根本沒機(jī)會寫。
但是動態(tài)代理模式學(xué)習(xí)掌握明白去分析可以源碼很有幫助了灵迫。


一:靜態(tài)代理模式


事物的發(fā)展是有規(guī)律的疮薇,現(xiàn)有靜態(tài)才會有動態(tài)的需求福贞。
代理模式給某一個對象提供一個代理對象笤昨,并由代理對象控制對原對象的引用。通俗的來講代理模式就是我們生活中常見的中介握恳。

靜態(tài)代理在使用時,需要定義接口或者父類,被代理對象與代理對象一起實現(xiàn)相同的接口或者是繼承相同父類瞒窒。一般來說,被代理對象和代理對象是一對一的關(guān)系乡洼,當(dāng)然一個代理對象對應(yīng)多個被代理對象也是可以的崇裁。
靜態(tài)代理,一對一則會出現(xiàn)時靜態(tài)代理對象量多束昵、代碼量大拔稳,從而導(dǎo)致代碼復(fù)雜,可維護(hù)性差的問題锹雏。一對多則代理對象會出現(xiàn)擴(kuò)展能力差的問題巴比。
方案一:一對一,100個真實對象需要代理,那就寫出100個代理對象去代理轻绞,代碼多采记,修改工作量巨大。
方案二:一對多政勃,100個真實對象公用一個代理唧龄,那就需要1個代理和100個真實對象同時產(chǎn)生關(guān)系,關(guān)系非常復(fù)雜很難擴(kuò)展奸远。

所以靜態(tài)代理局限性很大既棺,只適合明確知道真實對象是誰,而且數(shù)量不多情況下懒叛。
如果不知道真實對象的名字丸冕,不知道會有多少真實對象需要代理的情況下根本無法使用
具體代碼:




image.png

image.png

二:反射
靜態(tài)存在局限,那只有動態(tài)代理去解決了
那就需要用到反射
Reflection(反射)是Java被視為動態(tài)語言的關(guān)鍵芍瑞,反射機(jī)制允許程序在執(zhí)行期借助于Reflection API取得任何類的內(nèi)部信息晨仑,并能直接操作任意對象的內(nèi)部屬性及方法。


反射就是在運行時才知道要操作的類是什么拆檬,并且可以在運行時獲取類的完整構(gòu)造洪己,并調(diào)用對應(yīng)的方法。
?在運行時構(gòu)造任意一個類的對象
?在運行時獲取任意一個類所具有的成員變量和方法
?在運行時調(diào)用任意一個對象的方法(屬性)

三動態(tài)代理模式


image.png
image.png

image.png

優(yōu)點
只需要1個動態(tài)代理類就可以解決創(chuàng)建多個靜態(tài)代理的問題竟贯,避免重復(fù)答捕、多余代碼,更強(qiáng)的靈活性
動態(tài)代理的服務(wù)內(nèi)容不需要像靜態(tài)代理一樣寫在每個代碼塊中屑那,只需要寫在invoke()方法中即可拱镐,降低了代碼的冗余度。

缺點
效率低持际,相比靜態(tài)代理中 直接調(diào)用目標(biāo)對象方法沃琅,動態(tài)代理則需要先通過Java反射機(jī)制 從而 間接調(diào)用目標(biāo)對象方法
動態(tài)代理類仍然需要實現(xiàn)接口。

靜態(tài)代理蜘欲,動態(tài)代理測試代碼
如果喜歡請點個start

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末益眉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子姥份,更是在濱河造成了極大的恐慌郭脂,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澈歉,死亡現(xiàn)場離奇詭異展鸡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)埃难,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進(jìn)店門莹弊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涤久,“玉大人,你說我怎么就攤上這事箱硕∷┲瘢” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵剧罩,是天一觀的道長栓拜。 經(jīng)常有香客問我,道長惠昔,這世上最難降的妖魔是什么幕与? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮镇防,結(jié)果婚禮上啦鸣,老公的妹妹穿的比我還像新娘。我一直安慰自己来氧,他們只是感情好诫给,可當(dāng)我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著啦扬,像睡著了一般中狂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扑毡,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天胃榕,我揣著相機(jī)與錄音,去河邊找鬼瞄摊。 笑死勋又,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的换帜。 我是一名探鬼主播楔壤,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惯驼!你這毒婦竟也來了蹲嚣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤跳座,失蹤者是張志新(化名)和其女友劉穎端铛,沒想到半個月后泣矛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疲眷,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年您朽,在試婚紗的時候發(fā)現(xiàn)自己被綠了狂丝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片换淆。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖几颜,靈堂內(nèi)的尸體忽然破棺而出倍试,到底是詐尸還是另有隱情,我是刑警寧澤蛋哭,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布县习,位于F島的核電站,受9級特大地震影響谆趾,放射性物質(zhì)發(fā)生泄漏躁愿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一沪蓬、第九天 我趴在偏房一處隱蔽的房頂上張望彤钟。 院中可真熱鬧,春花似錦跷叉、人聲如沸逸雹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梆砸。三九已至,卻和暖如春植锉,著一層夾襖步出監(jiān)牢的瞬間辫樱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工俊庇, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留狮暑,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓辉饱,卻偏偏與公主長得像搬男,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子彭沼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容