代理模式給某一個對象提供一個代理對象,並由代理對象控制對原對象的引用,通俗的來說代理模式就是咱們生活中常見的中介。這種類型的設計模式屬於結構型模式程序員
分類設計模式
靜態代理:由程序員建立或特定工具自動生成源代碼,在對其編譯。在程序員運行以前,代理類.class文件就已經被建立了。緩存
動態代理:是在程序運行時經過反射機制動態建立的。工具
Cglib代理:靜態代理和動態代理模式都是要求目標對象是實現一個接口的目標對象,可是有時候目標對象只是一個單獨的對象,並無實現任何的接口,這個時候就可使用以目標對象子類的方式類實現代理.Cglib代理,也叫做子類代理,它是在內存中構建一個子類對象從而實現對目標對象功能的擴展。spa
特色設計
中介隔離做用:在某些狀況下,一個客戶類不想或者不能直接引用一個委託對象,而代理類對象能夠在客戶類和委託對象之間起到中介的做用,其特徵是代理類和委託類實現相同的接口。代理
開閉原則,增長功能:代理類除了是客戶類和委託類的中介以外,咱們還能夠經過給代理類增長額外的功能來擴展委託類的功能,這樣作咱們只須要修改代理類而不須要再修改委託類,符合代碼設計的開閉原則。代理類主要負責爲委託類預處理消息、過濾消息、把消息轉發給委託類,以及過後對返回結果的處理等。代理類自己並不真正實現服務,而是同過調用委託類的相關方法,來提供特定的服務。真正的業務功能仍是由委託類來實現,可是能夠在業務功能執行的先後加入一些公共的服務。例如咱們想給項目加入緩存、日誌這些功能,咱們就可使用代理類來完成,而不必打開已經封裝好的委託類。日誌
應用場景對象