動(dòng)態(tài)代理知識(shí)感悟

https://blog.csdn.net/briblue/article/details/73928350? ?基于此篇博客整理的感悟,再次多謝大佬

看retrofit,看到了動(dòng)態(tài)代理,并沒(méi)有實(shí)際是使用。目前只是基于上述博客整理,之后有新的感悟會(huì)更新 。。。

有大佬看了有什么不對(duì)的請(qǐng)多指正,愿意獻(xiàn)上膝蓋

代碼中的代理:使用共同的接口實(shí)現(xiàn)功能的增強(qiáng)?;陂_(kāi)放封閉原則,新增是允許的,修改是不允許的。

靜態(tài)代理

要有一個(gè)接口作為功能實(shí)現(xiàn)? (電影播放 )

實(shí)例? 實(shí)現(xiàn)電影播放的接口? (電影)

代理類(lèi)?? 實(shí)現(xiàn)電影播放的接口(電影院)? ?電影院接收電影實(shí)例,在自己的接口方法實(shí)現(xiàn)實(shí)例的接口方法,可以加入自己的需要的功能(播廣告)

實(shí)現(xiàn):?實(shí)例化真實(shí)的實(shí)例類(lèi),實(shí)例化代理類(lèi)傳入實(shí)例對(duì)象(由接口接收)并且實(shí)現(xiàn)接口的功能即可??

代理類(lèi)實(shí)現(xiàn)了接口的功能,在不修改實(shí)例的情況下,可以進(jìn)行功能的增強(qiáng)。

這符合封閉開(kāi)放原則,(增強(qiáng)了功能的實(shí)現(xiàn),卻不修改之前的代碼,只是增加了代碼,提高了復(fù)用率)

問(wèn)題:如果我們想實(shí)現(xiàn)新的功能呢,肯定會(huì)有一個(gè)新的接口,對(duì)應(yīng)寫(xiě)一個(gè)新的代理類(lèi)(不能修改之前的代碼)

動(dòng)態(tài)代理

原理和靜態(tài)代理是一樣的,代理類(lèi)和實(shí)力類(lèi)實(shí)現(xiàn)相同的功能,但是動(dòng)態(tài)代理類(lèi)不需要自己在預(yù)先寫(xiě)代理類(lèi)了,只是通過(guò)代碼反射生成代理類(lèi)來(lái)實(shí)現(xiàn)對(duì)應(yīng)實(shí)現(xiàn)的功能。

要有一個(gè)接口作為功能實(shí)現(xiàn)? (電影播放 )

實(shí)例實(shí)現(xiàn)電影播放的接口? (電影)

一個(gè)實(shí)現(xiàn)了 InvocationHandler接口的類(lèi)?同樣要接收實(shí)例類(lèi),并且 在其invoke方法中實(shí)現(xiàn)類(lèi)似代理類(lèi)需要實(shí)現(xiàn)的功能增強(qiáng)?

實(shí)現(xiàn):?實(shí)例化真實(shí)的實(shí)例類(lèi),實(shí)例化實(shí)現(xiàn)?InvocationHandler接口的類(lèi)并傳入實(shí)例的類(lèi),通過(guò) Proxy 的靜態(tài)方法 newProxyInstance 才會(huì)動(dòng)態(tài)創(chuàng)建代理類(lèi)(由接口接收),執(zhí)行接口的方法。

newProxyInstance 方法的三個(gè)參數(shù)? 實(shí)例類(lèi)的類(lèi)加載器,功能的接口,實(shí)現(xiàn)InvocationHandler接口的類(lèi)。

所以如果想要增加新的功能實(shí)現(xiàn),這個(gè)時(shí)候只需要寫(xiě)新的接口以及實(shí)例類(lèi),還是用之前的實(shí)現(xiàn)InvocationHandler接口的類(lèi)即可

此時(shí)動(dòng)態(tài)生成的代理類(lèi)是對(duì)應(yīng)接口的,一個(gè)接口一個(gè)類(lèi),類(lèi)在內(nèi)存中

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容