概念
代理:代替處理,又稱委託模式。
實現:爲目標對象提供(包裝)了一個代理,這個代理可以控制對目標對象的訪問。外界不直接訪問目標對象,而是訪問代理對象,再由代理對象調用目標對象。
分類:靜態代理、動態代理
靜態代理
代理對象持有目標對象的一個句柄,
其實就是將目標對象的引用作爲代理對象的成員變量。
缺點:因爲要對目標對象的每個方法都進行靜態編碼包裝,所以目標對象中有多少個方法,靜態代理對象中就需要有多少個方法。目標對象中方法過多的時候,代理對象就會顯的臃腫,也不便於維護和拓展。
代碼實現:
動態代理
所謂動態代理其實就是產生一個被處理器全面監聽的代理對象出來,這個代理對象的每次方法調用都會被處理器攔截下來。
代碼實現:
四要素:接口、實現類(被代理對象)、處理器、代理對象。
接口:
實現類:
處理器:
實現InvocationHandler接口,持有被代理對象。
核心方法——invoke,調用被代理對象的相應目標方法。
測試:
調用Proxy類中的newProxyInstance方法生成代理對象。
傳入參數——處理器、實現類類加載器、實現類的父接口。