07-代理模式(Proxy)

概述:

控制對其它對象的訪問。

使用場景:

保護目標對象

增強目標對象

優點:

代理模式能將代理對象與真實被調用的目標對象分離

一定程度上降低了系統的耦合度,擴展性好

保護目標對象 增強目標對象

缺點:

代理模式會造成系統設計中類的數目增加

在客戶端和目標對象增加一個代理對象,會造成請求處理速度變慢

增加系統的複雜度

拓展:

靜態代理:

通過在代碼中顯式定義一個業務實現類的代理,在代理類中對同名方法進行包裝,用戶通過調用代理類包裝過的業務方法來調用目標類的業務方法,同時對目標類的方法進行增強

動態代理:

通過接口中的方法名,在動態生成的代理類中調用業務實現類的同名方法(一定要是接口)

CGLib代理:

是通過繼承來實現的,生成的動態代理類是業務類的子類,通過重寫業務代碼進行代理,由於是使用的繼承來進行代理,如果這個類是final修飾,那麼這個類是無法被繼承的,如果一個類不是final的,而裏面的方法是final的,那麼方法將不能夠被重寫

Spring拓展:

當Bean有實現接口時, Spring就會用DK的動態代理

當Bean沒有實現接口時, Spring使用CGLib

可以強制使用 CGLib(在 spring配置中加入<aop: aspect- autoproxy proxy- target-class="true"/>)

 

 

和其他模式的區別:

代理模式和裝飾者模式:目的不同,裝飾者模式是爲對象加上行爲,而代理模式是控制訪問,代理模式更加註重通過設置代理人的方式來增強目標對象(一般是通過增強目標對象的某些行爲)

代理模式和適配器模式:適配器模式主要改變所考慮對象的接口,而代理類是不能夠改變所代理類的接口的

 

代碼地址:https://github.com/NoSuchClass/design_pattern/tree/master/src/structural/proxy

 

In JDK

* java.lang.reflect.Proxy

* RMI

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章