要想了解Java動態(tài)代理,首先要了解什么叫做代理,熟悉設(shè)計模式的朋友一定知道在Gof總結(jié)的23種設(shè)計模式中,有一種叫做代理(Proxy)的對象結(jié)構(gòu)型模式,動態(tài)代理中的代理,指的就是這種設(shè)計模式。
在我看來所謂的代理模式,和23種設(shè)計模式中的“裝飾模式”是一個東西。23種設(shè)計模式中將它們作為兩種模式,網(wǎng)上也有些文章講這兩種模式的異同,從細(xì)節(jié)來看,確實可以人為地區(qū)分這兩種模式,但是抽象到一定高度后,我認(rèn)為這兩種模式是完全一樣的。因此學(xué)會了代理模式,也就同時掌握了裝飾模式。
代理模式
代理模式簡單來說,就是對一個對象進(jìn)行包裝,包裝后生成的對象具有和原對象一樣的方法列表,但是每個方法都可以是被包裝過的。
靜態(tài)代理
讓我們先來看一段代碼:
package common;public class Test { static interface Subject{ void sayHi(); void sayHello(); } static class SubjectImpl implements Subject{ @Override public void sayHi() { System.out.println("hi");