注冊成功
X
W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
問題: 解釋一下代理模式(Proxy)
- 代理模式:
代理模式就是本該我做的事,我不做,我交給代理人去完成。就比如,我生產(chǎn)了一些產(chǎn)品,我自己不賣,我委托代理商幫我賣,讓代理商和顧客打交道,我自己負(fù)責(zé)主要產(chǎn)品的生產(chǎn)就可以了。
代理模式的使用,需要有本類,和代理類,本類和代理類共同實現(xiàn)統(tǒng)一的接口。然后在main中調(diào)用就可以了。本類中的業(yè)務(wù)邏輯一般是不會變動的,在我們需要的時候可以不斷的添加代理對象,或者修改代理類來實現(xiàn)業(yè)務(wù)的變更。
- 代理模式可以分為:
靜態(tài)代理
優(yōu)點:可以做到在不修改目標(biāo)對象功能的前提下,對目標(biāo)功能擴展
缺點:因為本來和代理類要實現(xiàn)統(tǒng)一的接口,所以會產(chǎn)生很多的代理類,類太多,一旦接口增加方法,目標(biāo)對象和代理對象都要維護(hù)。
動態(tài)代理(JDK代理/接口代理)
代理對象,不需要實現(xiàn)接口,代理對象的生成,是利用JDK的API,動態(tài)的在內(nèi)存中構(gòu)建代理對象,需要我們指定代理對象/目標(biāo)對象實現(xiàn)的接口的類型。
Cglib代理
特點: 在內(nèi)存中構(gòu)建一個子類對象,從而實現(xiàn)對目標(biāo)對象功能的擴展。
- 使用場景:
修改代碼的時候。不用隨便去修改別人已經(jīng)寫好的代碼,如果需要修改的話,可以通過代理的方式來擴展該方法。
隱藏某個類的時候,可以為其提供代理類
當(dāng)我們要擴展某個類功能的時候,可以使用代理類
當(dāng)一個類需要對不同的調(diào)用者提供不同的調(diào)用權(quán)限的時候,可以使用代理類來實現(xiàn)。
減少本類代碼量的時候。
需要提升處理速度的時候。就比如我們在訪問某個大型系統(tǒng)的時候,一次生成實例會耗費大量的時間,我們可以采用代理模式,當(dāng)用來需要的時候才生成實例,這樣就能提高訪問的速度。
以上內(nèi)容是否對您有幫助:
更多建議: