概要
有時(shí)候可能我們不希望暴露現(xiàn)有對(duì)象的所有接口,只希望公開其中部分接口,具體來說,比如我們有個(gè)對(duì)象具有一系列的方法接口,如果我們只需要這些接口中間的一小部分,那么我們沒必要去創(chuàng)建這個(gè)對(duì)象本身,我們可以通過一個(gè)更輕量的對(duì)象作為代理來公開我們需要的那部分接口。
目的
基于需求提供代理對(duì)象來實(shí)現(xiàn)既有對(duì)象接口,可以通過這種模式來調(diào)整現(xiàn)有接口的封裝。
實(shí)例
如概要里面所述的通過代理來暴露部分接口的應(yīng)用比較簡單易懂,這里就不舉相關(guān)實(shí)例來進(jìn)行說明了。這里舉個(gè)更典型的
Proxy模式的應(yīng)用方式。
很多應(yīng)用中經(jīng)常需要加載圖片,視屏等大容量媒體對(duì)象,一些第三方庫會(huì)提供相應(yīng)的接口,以圖片為例,大致接口如下:
HighImage是一個(gè)第三方已經(jīng)提供的支持顯示高清圖片的對(duì)象,在創(chuàng)建這個(gè)對(duì)象的時(shí)候會(huì)加載圖片,然后Show函數(shù)會(huì)把已經(jīng)加載的圖片顯示出來。
但是在實(shí)際使用中卻出現(xiàn)了這樣的問題,在初始化創(chuàng)建HighImage對(duì)象的時(shí)候,會(huì)加載高清圖片,由于高清圖片容量比較大,加載需要花費(fèi)一定時(shí)間,目前的需求是希望在初始化創(chuàng)建過程中不要去花費(fèi)時(shí)間加載圖片,而是在需要顯示的時(shí)候才去加載并顯示出來。
Proxy模式該登場了。讓我們通過Proxy代理對(duì)象來解決上面的問題。新建一個(gè)HighImageProxy類(備注:代碼中對(duì)象怎么銷毀不在考慮范疇)。
HighImageProxy類代理了HighImage的基本行為,但是它在創(chuàng)建對(duì)象時(shí)并不加載圖片,而是在Show方法里進(jìn)行加載。對(duì)Client端而言,在創(chuàng)建HighImageProxy對(duì)象時(shí)不需要花費(fèi)圖片加載的時(shí)間,滿足了我們的需求。
應(yīng)用
一些安全代理中經(jīng)常會(huì)限制對(duì)象的訪問權(quán)限,很多都是通過Proxy模式來實(shí)現(xiàn)的。如上面實(shí)例的Proxy模式應(yīng)用也是非常常見的一種。另外也要注意Proxy模式和Adapter模式的區(qū)別,Adapter模式是會(huì)改變接口調(diào)用形式來進(jìn)行適配的,而Proxy模式則是不會(huì)改變現(xiàn)有接口形式,使用相同的接口調(diào)用方式。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

