這篇主要介紹 相關內容,主要是一些基本概念普及。 代理模式 1、什麼是代理模式? ,為其他對象提供一種代理以控制對這個對象的訪問。[DP] 通俗的說就是指客戶端並不直接調用實際的對象,而是通過代理對象,來間接調用實際的對象。 2、實現原理 可以是介面,也可以是抽象類 內部含有對真實對象RealSub ...
這篇主要介紹代理模式
相關內容,主要是一些基本概念普及。
代理模式
1、什麼是代理模式?
代理模式(Proxy)
,為其他對象提供一種代理以控制對這個對象的訪問。[DP]
通俗的說就是指客戶端並不直接調用實際的對象,而是通過代理對象,來間接調用實際的對象。
2、實現原理
Subject:
可以是介面,也可以是抽象類
Proxy:
內部含有對真實對象RealSubject的引用,負責對真實主題角色的調用,併在真實主題角色處理前後做預處理和後處理
proxied:
真實主題角色,業務邏輯的具體執行者
3、代理模式應用
遠程代理
,為一個對象在不同的地址空間提供局部代表,這樣可以隱藏一個對象存在於不同地址空間的事實[DP]。例如==RPC遠程調用==。虛擬代理
,根據需要創建開銷很大的對象。通過它來存放實例化需要很時間的真是對象[DP]。例如瀏覽器使用虛擬代理來代替真實的圖片,代理中存儲圖片的大小和路徑,待到下載優化的目的。安全代理
,用來控制真實對象訪問時的許可權[DP]。例如==許可權控制==。智能指引
, 是指當調用真實的對象時,代理處理另外一些事情。代理類本身並不真正實現服務,而是同過調用委托類的相關方法,來提供特定的服務。真正的業務功能還是由委托類來實現,但是可以在業務功能執行的前後加入一些公共的服務。例如我們想給項目加入緩存、日誌這些功能,我們就可以使用代理類來完成,而沒必要打開已經封裝好的委托類。典型應用例如==SpringAop、日誌收集、過濾器==等等。4、創建形式
主要分
靜態代理
和動態代理
1、靜態代理
靜態代理其實就是代理類和被代理對象的關係在程式運行前已經確定好了(代碼已經寫好了),創建過程如下:
- 定義業務介面;
- 被代理類實現業務介面;
- 定義代理類並實現業務介面;
- 最後便可通過客戶端進行調用。(這裡可以理解成程式的main方法里的內容)
這樣一來就會帶來如下弊端:
- 如果介面增加一個方法,除了所有實現類需要實現這個方法外,所有代理類也需要實現此方法,增加了代碼維護的複雜度
靜態代理中,目標類與其代理類是一一對應的。但是,會存在這樣的情況:有N個類型不同的目標類,但是代理類中的“預處理、後處理”都是相同的,僅僅是調用目標類不同。若採用靜態代理,那麼必然需要手動創建N個代理類,很麻煩
2、動態代理
動態代理
在運行期為各個目標類分別生成代理類,共用“預處理,後處理”功能,不需要事先知道目標對象的類型,這樣可以大大減小程式規模。動態主要有兩種,一種jdk動態代理,另外一種是cglib代理。這裡限於篇幅,下篇學習筆記再總結。
參考資料:
- 《大話設計模式》第七章:為別人做嫁衣----代理模式
- 淺談Java【代理設計模式】——看這篇文章就懂了