當前位置:
首頁 > 知識 > 學習spring之前,先了解一下代理模式

學習spring之前,先了解一下代理模式


什麼是代理模式

舉個例子,我是一個包租公,我現在想賣房,但是我不想麻煩,每天被電話騷擾,所以這個時候我找了樓下一個中介,讓他幫我代理這些事,那麼他自然有租房的方法。以後如果有人想租房,直接找中介就行了。

學習spring之前,先了解一下代理模式

為什麼用代理模式

從上面的代碼可以看出,代理類(SaleProxy)和真實類(Jiajun)好像沒什麼區別,我直接(new Jiajun().sale())不就行了,那麼為什麼多次一舉呢,任何設計都有他的好處。我們可以發現代理類可以在真實類的基礎上增加方法,比如這個時候中介可以收取買主的費用。

學習spring之前,先了解一下代理模式

而這個不關我事,中介你幫我租出去就行。

什麼是動態代理模式

靜態代理模式有他的缺點:

  • 如果這個時候,我要做的事情增多了,比如我在賣房的時候,我還可以租房。那麼我在Sale介面要增加一個方法,真實類(Jiajun)要實現多一個方法,此時代理類(SaleProxy)又要實現多一個方法,如果以後要拓展,會增加很多方法,那麼就增加維護難度。

學習spring之前,先了解一下代理模式

  • 如果真實類(Jiajun)實現了多個介面,我要為多種方法代理,那麼我要手動創建很多代理類。

比如這裡我實現了兩個介面。

學習spring之前,先了解一下代理模式

這個時候我要生成兩個代理,那麼我就要創建兩個代理類

學習spring之前,先了解一下代理模式

如果我要為多種方法代理,那麼就會產生很多代理類。


針對這些缺點,動態代理出現了

學習spring之前,先了解一下代理模式

學習spring之前,先了解一下代理模式


顯然,上面的缺點得到解決了。

  • 即使介面增加方法,我也不用在代理類再實現一次。

  • 即使我要對不同方法做代理,我也不用創建一個代理類文件。

  • 動態代理類由Java反射機制動態生成,不用我們自己生成(這裡我們並沒有看到買房代理類,賣房代理類文件)

  • 動態代理類不僅簡化了編程工作,而且提高了軟體系統的可擴展性,因為Java 反射機制可以生成任意類型的動態代理類。(我們要買房代理就買房代理,賣房代理就賣房代理,比較靈活)。

  • 總的來說,關鍵的就是我們避免了代理類文件的編寫,從而提高了許多便利。

  • 至於動態代理是怎麼實現的,需要了解一下反射,後面會繼續更新。

我覺得分享是一種精神,分享是我的樂趣所在,不是說我覺得我講得一定是對的,我講得可能很多是不對的,但是我希望我講的東西是我人生的體驗和思考,是給很多人反思,也許給你一秒鐘、半秒鐘,哪怕說一句話有點道理,引發自己內心的感觸,這就是我最大的價值。(這是我喜歡的一句話,也是我寫文章的初衷)


學習Java的同學注意了!!!

學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流群495273252,我們一起學Java!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Java團長 的精彩文章:

對《深入理解Java虛擬機》的總結(一)
Java IO詳解——序列化與反序列化(對象流)
Java圖片上傳(mvc)
Java為什麼對常量的修改沒有生效?
一名40歲「老」程序員的反思

TAG:Java團長 |