????代理模式算是我們平時(shí)項(xiàng)目中接觸的比較多的一種模式,最常見的包括:Spring AOP,RPC框架,Mybatis中插件實(shí)現(xiàn)方式,JDK中Proxy類。下面從最簡(jiǎn)單的概念開始一起來學(xué)習(xí)一下代理模式。
什么是代理模式
????《設(shè)計(jì)模式》這本書上是這么說的:為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問。這句話聽起來看起來都很抽象,不過記住就好了。慢慢的根據(jù)例子來理解這種模式出現(xiàn)的意圖是什么、想解決什么樣的問題。
????書上對(duì)于代理模式舉了這樣一個(gè)例子:一份文檔中,如果包含了一個(gè)比較大的圖片,而我們又不想每次打開文檔時(shí)都把圖片加載出來,這個(gè)時(shí)候需要一個(gè)簡(jiǎn)單的圖標(biāo)來表示我們的圖片,只有在我們點(diǎn)擊這個(gè)圖標(biāo)時(shí),才會(huì)從磁盤中將圖片加載出來。這個(gè)圖標(biāo)就是這個(gè)圖片的代理(或者是一個(gè)鏈接)。
????代理模式又根據(jù)實(shí)際用途分了幾類,有助于我們?cè)诜治鰡栴}時(shí)合理的使用,方便我們?cè)趯W(xué)習(xí)時(shí)更結(jié)構(gòu)化的理解。
- 遠(yuǎn)程代理(Remote Proxy):為一個(gè)對(duì)象在不同地址空間提供局部代表,RPC框架。
- 虛代理(Virtual Proxy):根據(jù)需要?jiǎng)?chuàng)建開銷很大的對(duì)象。
- 保護(hù)代理(Protection Proxy):控制對(duì)原始對(duì)象的訪問。
- 智能索引(Smart Reference):取代了簡(jiǎn)單的指針,它在訪問對(duì)象時(shí)執(zhí)行了一些附加操作。
代理模式的結(jié)構(gòu)

image.png
????代理類中持有真實(shí)類中的一個(gè)引用,當(dāng)用戶訪問代理類時(shí),代理類會(huì)調(diào)用真實(shí)類中響應(yīng)的方法。當(dāng)然這期間可以加很多代理類自己的邏輯。