因爲前幾天作生成文檔的功能大量用到了反射機制,因此我閒時看了一下java反射機制的原理,發現裏面大量使用了代理模式(java方法的method.invoke()代理native方法的method.invoke,不在此文章展開),因爲對代理模式有點陌生了。寫這篇文章從新加深一下我對代理模式的理解。java
代理模式顧名思義就是,找一個代理人幫你作事。好比B是買房者,要買房必需要通過中介A代理買房,由於B沒有聯繫房東的方式。這裏有三個角色,一個是代理對象即A,一個是目標對象B,第三個是A和B的抽象接口對象C。spa
代理模式分爲靜態代理和動態代理,如下講靜態代理。下一篇文章講動態代理代理
靜態代理:代碼編譯時就肯定了被代理的類是哪個;對象
靜態代理blog
下面寫一個例子來實現靜態代理。接口
運行結果:文檔
能夠看到A做爲代理對象,能夠加強B的接口方法的功能。編譯
由此知道代理模式的好處是:原理
在不修改目標對象的功能前提下,對目標功能擴展和加強 ,對目標功能增長攔截。好比中介加強了買房人的買房功能,明星經紀人幫明星攔截了狗仔。擴展
固然也有壞處:
好比這種代理模式屬於靜態代理。每次有目標對象,都得增長一個代理對象。並且接口的功能若是要改變的話,目標和代理對象都得改,十分不方便。