手撕JAVA(三十三)代理

概念

代理:代替處理,又稱委託模式。

實現:爲目標對象提供(包裝)了一個代理,這個代理可以控制對目標對象的訪問。外界不直接訪問目標對象,而是訪問代理對象,再由代理對象調用目標對象。

分類:靜態代理、動態代理

靜態代理

代理對象持有目標對象的一個句柄,

其實就是將目標對象的引用作爲代理對象的成員變量。

缺點:因爲要對目標對象的每個方法都進行靜態編碼包裝,所以目標對象中有多少個方法,靜態代理對象中就需要有多少個方法。目標對象中方法過多的時候,代理對象就會顯的臃腫,也不便於維護和拓展。

代碼實現:

動態代理

所謂動態代理其實就是產生一個被處理器全面監聽的代理對象出來,這個代理對象的每次方法調用都會被處理器攔截下來。

代碼實現:

四要素:接口、實現類(被代理對象)、處理器、代理對象。

接口:​​​​​​

實現類:

處理器:

實現InvocationHandler接口,持有被代理對象。

核心方法——invoke,調用被代理對象的相應目標方法。

測試:

調用Proxy類中的newProxyInstance方法生成代理對象。

傳入參數——處理器、實現類類加載器、實現類的父接口。

 

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