學(xué)AI,好工作 就找北大青鳥
關(guān)注小青 聽(tīng)課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

大話設(shè)計(jì)模式之代理模式

來(lái)源:北大青鳥總部 2023年03月09日 13:31

摘要: 所謂代理模式就是給目標(biāo)對(duì)象提供一個(gè)代理對(duì)象,并由代理對(duì)象控制對(duì)目標(biāo)對(duì)象的引用,比如我們?cè)谕瓿梢患虑榈臅r(shí)候,需要通過(guò)中介來(lái)完成,而這個(gè)中介就類似一個(gè)代理的角色,這種情況在我們的程序中就叫做代理模式。

最近猿小二,在生活上遇到了一些挫折;既然是挫折,想來(lái)可能不是什么好事兒,但是對(duì)于身為程序員的猿小二來(lái)說(shuō),凡事兒總喜歡刨根問(wèn)底,追求事物的本質(zhì),充分體現(xiàn)了程序員對(duì)任何事情都特別的認(rèn)真(一根筋)的人生態(tài)度;就像很多技術(shù)極客都信奉的"鋼鐵俠"所推崇的 "第一性原理",遇到問(wèn)題總會(huì)探尋問(wèn)題的本質(zhì)。



這不最近猿小二在租房子的時(shí)候,就將生活中的找中介租房的事情,跟酷酷的編碼聯(lián)系在了一起,更加深刻的理解了什么是"藝術(shù)來(lái)源于生活"

我們都知道,對(duì)于大部分"漂"來(lái)說(shuō),租房是關(guān)乎我們?cè)谝蛔鞘猩嫦聛?lái)的最根本的因素,所以幾乎每個(gè)人都逃脫不了租房的命運(yùn)。

在租房的過(guò)程中,我們通常情況下,我們是不知道具體的房源的信息的,這時(shí)候都會(huì)通過(guò)一個(gè)中介來(lái)幫我們找到合適的房源,而我們也是最終通過(guò)中介這個(gè)角色來(lái)完成租房的一系列的事情。

像這種我們?cè)谕瓿梢患虑榈臅r(shí)候,需要通過(guò)中介來(lái)完成,而這個(gè)中介就類似一個(gè)代理的角色,這種情況在我們的程序中就叫做代理模式。

而這種現(xiàn)象其實(shí)在我們的生活中是比較多見(jiàn)的,比如:購(gòu)買火車票不一定要去火車站買,可以通過(guò)12306 網(wǎng)站或者去火車票代售點(diǎn)買,或者第三方的代理機(jī)構(gòu),攜程、同城等。

再比如:找工作,通常都是在一些招聘網(wǎng)站,或者朋友內(nèi)推等方式。甚至現(xiàn)在找女朋友,都可以有中介來(lái)完成,這也是程序員的一大福音啊,簡(jiǎn)直是造福人類啊,哈哈哈哈...我們?cè)賮?lái)看下官方的定義。


代理模式定義

所謂代理模式就是給目標(biāo)對(duì)象提供一個(gè)代理對(duì)象,并由代理對(duì)象控制對(duì)目標(biāo)對(duì)象的引用,在我們上面的例子中目標(biāo)對(duì)象就是房源,代理對(duì)象就是中介。


代理模式的特點(diǎn)

既然"藝術(shù)來(lái)源于生活",本著存在即合理的人生哲學(xué),中介和代理模式的出現(xiàn)也一定有它的的意義;所以我們先來(lái)探討下代理模式的特點(diǎn),我們先來(lái)說(shuō)說(shuō)他的優(yōu)點(diǎn)。

  • 安全性

  • 耦合性

  • 擴(kuò)展性


安全性

當(dāng)我們的客戶端去調(diào)用目標(biāo)對(duì)象的時(shí)候,就可以通過(guò)一個(gè)代理對(duì)象來(lái)完成,這樣就可以保護(hù)目標(biāo)對(duì)象的安全,避免很多的客戶端都去直接調(diào)用目標(biāo)對(duì)象。

耦合性

將客戶端對(duì)象和目標(biāo)對(duì)象分離開(kāi)來(lái),通過(guò)一個(gè)代理對(duì)象來(lái)完成相應(yīng)的功能,一定程度上是降低了系統(tǒng)之間的耦合性。

擴(kuò)展性

通過(guò)展性雜性展目標(biāo)對(duì)象的功能,這個(gè)在我們學(xué)習(xí)框架的時(shí)候,就會(huì)經(jīng)常遇到,比如:Spring框架中的AOP其原理就是通過(guò)代理模式來(lái)完成的。



優(yōu)點(diǎn)說(shuō)完了,夸也夸了,本著公平的原則,我們也的來(lái)說(shuō)代理模式的缺點(diǎn)......

人類:什么?還有缺點(diǎn),

上帝:當(dāng)然了,我不僅在造人的時(shí)候,造了男人和女人,在創(chuàng)造任何事物的時(shí)候,都給了優(yōu)點(diǎn)和缺點(diǎn),所以你們?nèi)祟愂澜绮拍敲簇S富多彩。

人類:好了,你說(shuō)吧;心想:世界上的那么多壞人原來(lái)都是你搞的鬼....

于是上帝開(kāi)始了它的即興演講,話說(shuō)代理模式的缺點(diǎn),稍微比優(yōu)點(diǎn)少了一個(gè),只有兩個(gè)而已,嘿嘿..


  • 復(fù)雜性

  • 性能


復(fù)雜性

本來(lái)客戶端可以直接和目標(biāo)對(duì)象建立關(guān)系,直接調(diào)用,非要加上一個(gè)代理對(duì)象,無(wú)疑是增加了系統(tǒng)的復(fù)雜性,多一事不如少一事。

性能

還是剛才說(shuō)的,好端端的多出了有一個(gè)代理對(duì)象,系統(tǒng)在創(chuàng)建對(duì)象的時(shí)候,是不是就要多創(chuàng)建一個(gè)代理對(duì)象(這可真是摳啊)。


代理模式實(shí)現(xiàn)方式

好了,到這里道理我們都了解了,接下來(lái)咱么就來(lái)看看,代理模式在代碼中是如何應(yīng)用的,下面咱么會(huì)通過(guò)一個(gè)小案例來(lái)加深對(duì)代理模式的理解。

接下來(lái)咱么就以一個(gè)大家都喜聞樂(lè)見(jiàn)的案例來(lái)演示下代理模式。

這個(gè)過(guò)程中總共需要兩個(gè)類和一個(gè)接口,一個(gè)是目標(biāo)對(duì)象,一個(gè)是代理對(duì)象,還有一個(gè)頂層的抽象接口。

首先,咱么先來(lái)抽象出一個(gè)頂層的接口,這是婚介所的抽象接口。

/**
* 婚介所
*/
public interface Matchmaking {


// 撮合類,撮合單身男女的方法
public void Match();
}


然后我們創(chuàng)建目標(biāo)對(duì)象,它就是程序猿,也就是真實(shí)對(duì)象,程序猿人生最大的目標(biāo)就是找到女朋友了。

/**
* 程序猿--->真實(shí)的對(duì)象
*/
public class ProgrammerReal implements Matchmaking {
public void Match() {
System.out.println("努力找女朋友中....");
}
}


最后還要?jiǎng)?chuàng)建代理對(duì)象,這個(gè)代理對(duì)象就是傳說(shuō)中的婚介所,廣大程序猿的福音。

/**
* 非誠(chéng)勿擾婚介所--->代理對(duì)象
*/
public class FeiChengWuRaoProxy implements Matchmaking {
// 持有的真實(shí)對(duì)象
ProgrammerReal real = new ProgrammerReal();
public void Match() {
// 擴(kuò)展功能
System.out.println("程序猿沒(méi)有女朋友..........");


// 調(diào)用真是對(duì)象
real.Match();


// 擴(kuò)展功能
System.out.println("程序猿找到了女朋友........哈哈哈");
}
}


到這里代碼就齊活了,最后為了驗(yàn)證下我們的理論,還要進(jìn)行下測(cè)試,上代碼。

/**
* 代理模式測(cè)試
*/
public class ProxyTest {
public static void main(String[] args) {
// 創(chuàng)建代理對(duì)象
FeiChengWuRaoProxy proxy = new FeiChengWuRaoProxy();
proxy.Match();
}
}


看結(jié)果,結(jié)果顯示,程序猿通過(guò)婚介所成功找到了女朋友,說(shuō)明我的測(cè)試是沒(méi)問(wèn)題。



同時(shí)通過(guò)上面的這個(gè)案例,也告訴大家婚介所是真的有用的,廣大程序猿們可以試一試,萬(wàn)一實(shí)現(xiàn)了呢。


標(biāo)簽: java
熱門班型時(shí)間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計(jì)全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開(kāi)發(fā)全能班 爆滿開(kāi)班
網(wǎng)絡(luò)安全運(yùn)營(yíng)班 爆滿開(kāi)班
報(bào)名優(yōu)惠
免費(fèi)試聽(tīng)
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門話題 站內(nèi)鏈接