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

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

來源:北大青鳥總部 2023年03月09日 13:31

摘要: 所謂代理模式就是給目標(biāo)對象提供一個代理對象,并由代理對象控制對目標(biāo)對象的引用,比如我們在完成一件事情的時候,需要通過中介來完成,而這個中介就類似一個代理的角色,這種情況在我們的程序中就叫做代理模式。

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



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

我們都知道,對于大部分"漂"來說,租房是關(guān)乎我們在一座城市生存下來的最根本的因素,所以幾乎每個人都逃脫不了租房的命運。

在租房的過程中,我們通常情況下,我們是不知道具體的房源的信息的,這時候都會通過一個中介來幫我們找到合適的房源,而我們也是最終通過中介這個角色來完成租房的一系列的事情。

像這種我們在完成一件事情的時候,需要通過中介來完成,而這個中介就類似一個代理的角色,這種情況在我們的程序中就叫做代理模式。

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

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


代理模式定義

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


代理模式的特點

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

  • 安全性

  • 耦合性

  • 擴展性


安全性

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

耦合性

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

擴展性

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



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

人類:什么?還有缺點,

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

人類:好了,你說吧;心想:世界上的那么多壞人原來都是你搞的鬼....

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


  • 復(fù)雜性

  • 性能


復(fù)雜性

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

性能

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


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

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

接下來咱么就以一個大家都喜聞樂見的案例來演示下代理模式。

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

首先,咱么先來抽象出一個頂層的接口,這是婚介所的抽象接口。

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


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


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

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


最后還要創(chuàng)建代理對象,這個代理對象就是傳說中的婚介所,廣大程序猿的福音。

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


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


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


到這里代碼就齊活了,最后為了驗證下我們的理論,還要進行下測試,上代碼。

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


看結(jié)果,結(jié)果顯示,程序猿通過婚介所成功找到了女朋友,說明我的測試是沒問題。



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


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