大話Java代理模式

1、什麼是代理

首先理解一下什麼是代理。簡單來講,代理就你要作一件事情,我替你把事情作了。這是現實生活中咱們遇到的代理的需求場景。但寫代碼的時候對代理場景的需求,跟現實場景有點區別,本質上仍是幫你作事(調用要執行的方法),但在代碼世界裏,若是僅僅只是把要調用的方法執行了,那徹底沒有必要再新建類(代理類)去執行,所以,編碼的代理場景,更多體如今,我不但要替你把本來先作的事情(調用方法)作了,我還要把你不須要作、或不想作的事情給作了,咱們稱其爲方法的加強。java

2、代理方式

衆所周知,java裏面的代理模式分爲靜態代理和動態代理兩種方式。那如何理解這兩種代理方式呢?之前我總認爲這兩種方式是對立的,這給個人理解帶來不小的阻礙。其實否則,後來我才發現,它們並不對立,而是解決編碼的過程當中代理的兩種不一樣場景而已。
前面咱們提到,編碼的代理需求,更多體如今於方法的加強。圍繞這個核心,有利於咱們更好的理解二者的異同。程序員

  • 靜態代理

首先咱們舉一個靜態代理的使用場景,有利於咱們更好的理解。我始終相信每一項技術的發展,都是來着現實生活的推進。所以咱們能夠找一個現實場景進行類比。
好比近兩年的新冠疫情。在此插一句,祝人類早日打敗疫情,早日擺脫口罩的束縛,早日自由暢快地呼吸。提到打敗疫情,就不得不提到疫苗,人類想打敗疫情,目前最好的方式就是疫苗的研發。那疫苗跟咱們代理有啥關係呢?
咱們都知道,疫苗在研發處理的初期,都是比較緊缺的,因此在初期,對疫苗的使用,確定是先給最須要的人先使用。好比先給一線醫護人員使用。那打疫苗就得報名,她們還被告知是手動填表報名,可能咱們的沒了的醫護天使在一線抗戰都很是忙,沒有時間報名,那這個時候有個小聰明就想,我也要爲疫情抗戰出一份力,我無法到一線工做,我只是能幫一線醫護人員報名,幫他們代理報名。這時候,一線醫護人員是一個特定的羣體(對應咱們的類),手動填表報名是一個要被代理的特定動做(一個方法),小聰明(代理類)代理報名。
爲特定的類,固化的方法代理,咱們稱之爲靜態代理,是對原有業務邏輯的擴充。小聰明很明確,他要爲一線醫護天使報名打疫苗,並處理一些雜七雜八的事情,不耽誤他們的工做。編程

  • 動態代理

後來隨着疫苗生產的加速推動,疫苗愈來愈多。對愈來愈多的羣體開放,學生想報名,工人想報名,畫家想報名,程序員也想報名的,叫不上名的人都想報名。這時原先的手動填表已經知足不了需求了。需求,沒錯,就是需求推進社會的進步,技術的發展。這時政府相關機構會開發通道,讓更多有能力的人或機構來幫忙解決報名的事情。你會看到,如今琳琅滿目的報名方式:網站報名,社區報名,小程序報名,各式各樣的報名方式被開發出來,只爲一件事,就是報名。
對應咱們的編程,其實的就是寫一個接口,報名渠道,好比說小程序,開放報名通道就是接口裏面提供報名的方法,不斷增長的各種羣體都想經過小程序報名,是對接口方法的實現,小程序不斷的完善本身對各種羣體的報名支持,咱們能夠理解爲動態生成代理類。而後小程序完成報名,就是對人們報名需求的代理。經過這些代理進行報名,能夠快速獲上交材料,得到報名資格,這是對方法的加強。小程序

  • 區別

能夠看到,靜態代理和動態代理都提到了方法的加強,這是咱們一直強調的代理的場景。那他們有什麼不一樣呢。從上面例子不難理解,動態代理是爲了解決靜態代理的侷限性而產生的。靜態代理是對類裏特定方法的加強,而動態代理是對接口的裏方法的加強,只要實現該接口的類,都能實現方法的加強。因爲實現接口的方法能夠有無數個類,因此纔有了動態代理的需求網站

相關文章
相關標籤/搜索