JAVA設計模式1——代理模式

按照原計劃是準備一直寫《深入理解JAVA虛擬機》的讀書筆記的,但是上一篇文章中,在製造方法區溢出的時候,原書的大致思路是:方法區中存儲的是運行時的類信息,通過CGLIB代理生成大量的類,超過方法區的最大容量,就會產生溢出。

這裏書中提到了一個詞“CGLIB”,說實話,筆者也是聽說過沒用過(尷尬),於是百度之,“CGLIB(Code Generation Library)是一個強大的,高性能,高質量的Code生成類庫”,再搜索一下博客,又發現了JDK動態代理,那麼什麼又是代理,就是今天要和大家探討的——代理模式。

代理模式(Proxy Pattern)的定義:爲另一個對象提供一個替身或佔位符,以控制對這個對象的訪問(Head First設計模式給出的定義)。

類圖如下


應用場景:當Client爲了實現Subject的目標而直接訪問RealSubject存在問題的時候(比如對象創建開銷很大,或者某些操作需要安全控制,或者需要進程外的訪問),就需要Proxy來代替Subject來執行request操作。

這個定義太抽象了,不太容易理解。

讓我們舉個例子來說吧,我們通過辛辛苦苦地碼程序攢了點積蓄,想着拿這一筆錢來做點理財,理財的話炒股是利潤比較高的,但是我們又沒有理財經驗,該怎麼做纔好呢?

爲了方便,我們不如到銀行找一個理財經理,我們只需要把錢交給他,讓他來幫我們打理就可以了。

測試代碼如下,首先有一個理財的接口

然後有一個炒股類實現理財接口,這裏炒股的方法中,有炒股經驗的對象才能炒,沒有的不可以。


再創建一個理財經理類,實現理財接口,默認理財經理有炒股經驗


最後,我們去執行理財方法吧,這裏在最下面,我們試一下直接訪問炒股類

運行程序,得出如下

最後的測試代碼的類圖如下所示,其中理財(ManagerMoney)就是目標(Subject);炒股(TradeStock)就是理財的實現類,理財經理(FinancialManager)就是代理,去理財的方法通過代理,更方便地實現了理財。

(截圖使用的IDEA中的PlantUML插件,感興趣的可以自行搜索,或者有問題的可以留言交流)

到這裏一個簡單的例子就完成,相信大家也都有了一個初步的認識,下一篇會學習一下JDK動態代理的知識。


喜歡文章或想一起學習的朋友可以關注我,我將會持續更新,有什麼疑問或文中有不當之處請給我留言,真誠地希望能與大家一起交流探討,學習進步。在收藏的同時能給我點個贊,感激不盡。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章