靜態代理和動態代理的區別


 

 代理是一種常用的設計模式,其目的就是為其他對象提供一個代理以控制對某個對象的訪問。

更通俗的說,代理解決的問題當兩個類需要通信時,引入第三方代理類,將兩個類的關系解耦,讓我們只了解代理類即可,而且代理的出現還可以讓我們完成與另一個類之間的關系的統一管理,但是切記,代理類和委托類要實現相同的接口,因為代理真正調用的還是委托類的方法。

靜態:由程序員創建代理類或特定工具自動生成源代碼再對其編譯。在程序運行前代理類的.class文件就已經存在了。

動態:在程序運行時運用反射機制動態創建而成。

 

靜態代理類優缺點

 

優點:

 

代理使客戶端不需要知道實現類是什么,怎么做的,而客戶端只需知道代理即可(解耦合),對於如上的客戶端代碼,newUserManagerImpl()可以應用工廠將它隱藏,如上只是舉個例子而已。

 

缺點:

1)代理類和委托類實現了相同的接口,代理類通過委托類實現了相同的方法。這樣就出現了大量的代碼重復。如果接口增加一個方法,除了所有實現類需要實現這個方法外,所有代理類也需要實現此方法。增加了代碼維護的復雜度。

2)代理對象只服務於一種類型的對象,如果要服務多類型的對象。勢必要為每一種對象都進行代理,靜態代理在程序規模稍大時就無法勝任了。如上的代碼是只為UserManager類的訪問提供了代理,但是如果還要為其他類如Department類提供代理的話,就需要我們再次添加代理Department的代理類。

動態代理優點:

 

動態代理與靜態代理相比較,最大的好處是接口中聲明的所有方法都被轉移到調用處理器一個集中的方法中處理(InvocationHandler.invoke)。這樣,在接口方法數量比較多的時候,我們可以進行靈活處理,而不需要像靜態代理那樣每一個方法進行中轉。而且動態代理的應用使我們的類職責更加單一,復用性更強

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM