代理模式(Proxy)

定義

為其他對象提供一種代理,以控制對這個對象的訪問;

結(jié)構(gòu)UML

代理模式結(jié)構(gòu)圖

整個的代理模式矢空,有面向接口編程的雛形,下面通過代碼禀横,對UML圖進行解析:

interface Subject {
    fun request()
}

Subject是一個接口屁药,該接口定義了request方法。

class RealSubject : Subject {
    override fun request() {
        // do sth.
    }
}

RealSubject繼承了Subject接口柏锄,實現(xiàn)其中的方法酿箭。

class Proxy : Subject {

    val realSubject: RealSubject = RealSubject()

    override fun request() {
        realSubject.request()
    }

}

代理也繼承了Subject接口,實現(xiàn)其中方法趾娃,同時缭嫡,還持有一個RealSubject的實例,實現(xiàn)的方法實質(zhì)就是調(diào)用RealSubject中的對應方法抬闷。

class Client {

    fun startRequest() {
        val proxy: Proxy = Proxy()
        proxy.request()
    }

}

調(diào)用時妇蛀,用戶只和代理Proxy進行交互,不必知曉真實操作的對象笤成。

應用實例

王小輝想租房子评架,但是房主身份神秘,從來沒有露面過炕泳,而是委托自己的律師與王小輝簽訂合同纵诞。在這之中神秘房主的律師就起到了代理的作用。

interface IRentHouse {
    fun viewHouse()
    fun payInAdvance()
    fun signContract()
}

此時培遵,有一個租房的接口挣磨,IRentHouse。

class Landlord : IRentHouse {

    override fun viewHouse() {
        // 掏出房子鑰匙
    }

    override fun payInAdvance() {
        // 收定金
    }

    override fun signContract() {
        // 簽合同
    }

}

房東Landlord實現(xiàn)了這個接口荤懂,具備看房茁裙、收定金和簽合同的具體功能。

class Proxy : IRentHouse {

    val landlorder: Landlord = Landlord()

    override fun viewHouse() {
        landlorder.viewHouse()
    }

    override fun payInAdvance() {
        landlorder.payInAdvance()
    }

    override fun signContract() {
        landlorder.signContract()
    }

}

房主的律師节仿,起到了代理的作用晤锥,代理房主完成看房、收錢和簽合同的功能廊宪。

class WangXiaoHui {

    fun startRequest() {
        val proxy: Proxy = Proxy()
        proxy.viewHouse()
        proxy.payInAdvance()
        proxy.signContract()
    }

}

王小輝只和律師(代理)進行交互泄隔,就能完成租房的全部流程,很好的隱藏了房主的信息贪染。

總結(jié)

代理模式四中分類

1涂乌、遠程代理

為一個對象,在不同的地址空間提供局部代理傅寡,可以隱藏一個對象存在于不同地址空間的事實放妈。比如WebService北救,由WebReference進行隱藏代理。

2芜抒、虛擬代理

根據(jù)需求創(chuàng)建開銷很大的對象珍策,通過它來存放實例化需要很長時間的真是對象,提升性能宅倒。比如打開很大的網(wǎng)頁攘宙,先看到文字,隨后圖片才一張張加載出來拐迁,未顯示的圖片框蹭劈,就是虛擬代理,代替了真實的圖片线召。

3铺韧、安全代理

用來控制真實對象的訪問權(quán)限。

4灶搜、智能指引

調(diào)用真實對象的方法的同時祟蚀,代理可以處理其他事務。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末割卖,一起剝皮案震驚了整個濱河市前酿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鹏溯,老刑警劉巖罢维,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異丙挽,居然都是意外死亡肺孵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門颜阐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來平窘,“玉大人,你說我怎么就攤上這事凳怨」逅遥” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵肤舞,是天一觀的道長紫新。 經(jīng)常有香客問我,道長李剖,這世上最難降的妖魔是什么芒率? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮篙顺,結(jié)果婚禮上偶芍,老公的妹妹穿的比我還像新娘充择。我一直安慰自己,他們只是感情好腋寨,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布聪铺。 她就那樣靜靜地躺著化焕,像睡著了一般萄窜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撒桨,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天查刻,我揣著相機與錄音,去河邊找鬼凤类。 笑死穗泵,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的谜疤。 我是一名探鬼主播佃延,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼夷磕!你這毒婦竟也來了履肃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤坐桩,失蹤者是張志新(化名)和其女友劉穎尺棋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绵跷,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡膘螟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了碾局。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荆残。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖净当,靈堂內(nèi)的尸體忽然破棺而出内斯,到底是詐尸還是另有隱情,我是刑警寧澤蚯瞧,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布嘿期,位于F島的核電站,受9級特大地震影響埋合,放射性物質(zhì)發(fā)生泄漏备徐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一甚颂、第九天 我趴在偏房一處隱蔽的房頂上張望蜜猾。 院中可真熱鬧秀菱,春花似錦、人聲如沸蹭睡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肩豁。三九已至脊串,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間清钥,已是汗流浹背琼锋。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留祟昭,地道東北人缕坎。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像篡悟,于是被迫代替她去往敵國和親谜叹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容