国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

enda / 2085人閱讀

摘要:代理模式的定義來源于百度百科為其他對象提供一種代理以控制對這個(gè)對象的訪問。二來源大話設(shè)計(jì)模式三例子實(shí)現(xiàn)現(xiàn)在根據(jù)上面購票代理的場景來實(shí)現(xiàn)例子接口,定義真實(shí)火車站,還有代理提供的服務(wù)。

一、定義

? ? ? ?在網(wǎng)絡(luò)不發(fā)達(dá)之前,我們買火車票,通常都需要跑到火車站去買。這對于我們來說可能有些麻煩,偶然有一天,你發(fā)現(xiàn)你樓下有一家便利店居然能買火車票,這就方便很多。其實(shí)啊,便利店并不提供火車服務(wù),也沒有權(quán)利發(fā)行火車票,所以它只是提供了代理,代理了火車站的購票服務(wù),這就是一種代理模式。

代理模式的定義(來源于百度百科):為其他對象提供一種代理以控制對這個(gè)對象的訪問。在某些情況下,一個(gè)對象不適合或者不能直接引用另一個(gè)對象,而代理對象可以在客戶端和目標(biāo)對象之間起到中介的作用。

從定義了,我們就可以知道代理模式的作用了,提供對真實(shí)對象的代理,可以達(dá)到對訪問真實(shí)對象的控制,起到中介的作用。

二、UML

來源:《大話設(shè)計(jì)模式》


三、例子實(shí)現(xiàn)

現(xiàn)在根據(jù)上面購票代理的場景來實(shí)現(xiàn)例子

1、接口,定義真實(shí)火車站,還有代理提供的服務(wù)。

package com.design.proxy;
public interface TrainServiceInf {  
  
    public void saleTicket();
}

2、火車站類,真正提供買票服務(wù)

package com.design.proxy;
/** * 被代理的真實(shí)對象 */
public class TrainStation implements TrainServiceInf {    

    @Override    
    public void saleTicket() 
    {        
        System.out.println("今天心情好,賣給你一張票!");    
    }
}

3、定義代理類,持有真實(shí)對象的引用

package com.design.proxy;public 

class TrainProxy implements TrainServiceInf{    

    private TrainServiceInf trainServiceInf;
    
    public TrainProxy(){        
        trainServiceInf = new TrainStation();    
    }    
    @Override    
    public void saleTicket() {        
        System.out.println("購票還跑去火車站,你out了,跑去了也不一定賣給你,給點(diǎn)手續(xù)費(fèi),我保證幫你買到!!");        
        //真正去購票
        trainServiceInf.saleTicket();    
    }
}

客戶端調(diào)用

package com.design.proxy;
public class TestMain {    
    public static void main(String[] args) {        
        TrainServiceInf trainProxy = new TrainProxy(); 
        //通過代理類來買票       
        trainProxy.saleTicket();    
    }
}

四、應(yīng)用場景

1、遠(yuǎn)程代理

為一個(gè)對象在不同的地址空間提供局部代表,隱藏一個(gè)對象在不同地址空間的事實(shí)。這個(gè)在遠(yuǎn)程調(diào)用中,是個(gè)很明顯的體現(xiàn)。比如我們通過一個(gè)對象來代理遠(yuǎn)程服務(wù),調(diào)用這個(gè)對象的方法,則會(huì)相應(yīng)的調(diào)用遠(yuǎn)程的方法。所以該對象為遠(yuǎn)程服務(wù)的一個(gè)代理。

2、虛擬代理

需要?jiǎng)?chuàng)建開銷大的對象,通過它來存放實(shí)例化需要很長時(shí)間的真實(shí)對象。

3、安全代理

用來控制真實(shí)對象訪問時(shí)的權(quán)限,如上面的購票例子中,我們可以在購票方法上加入一個(gè)身份證號(hào)碼參數(shù),客戶端傳過來省份證號(hào)碼,代理類里面進(jìn)行驗(yàn)證,發(fā)現(xiàn)省份證為老賴的,則不讓購票【手動(dòng)滑稽】

4、智能指引

比如說上面購買車票,可能購買車票還得先錄入省份證信息等其他操作。我們其實(shí)不想知道得干嘛,我們的目的很簡單就是買到一張票。代理賣票服務(wù)的便利店會(huì)幫我們完成這一系列的操作包括:錄入省份證信息+買票。

五、總結(jié)說明

需要注意的是,以上編寫的為靜態(tài)代理,即代碼運(yùn)行前代理類就已經(jīng)是編寫好的了,至于動(dòng)態(tài)代理,代理類是在運(yùn)行時(shí)才生成的,這里先不做介紹,后續(xù)會(huì)另外的文章介紹。代理模式本質(zhì)上就是通過代理對象來對真實(shí)對象的訪問,那么為什么不直接掉真實(shí)對象呢??那時(shí)因?yàn)檎{(diào)真實(shí)對象前,我們還需要做其他操作,這個(gè)操作又不屬于真實(shí)對象提供的服務(wù)。業(yè)務(wù)上,他并不屬于真實(shí)對象。比如說調(diào)用前做安全驗(yàn)證、或者組合幾個(gè)操作。


文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/7848.html

相關(guān)文章

  • PHP設(shè)計(jì)模式代理模式

    摘要:虛擬代理如果需要?jiǎng)?chuàng)建一個(gè)資源消耗較大的對象,先創(chuàng)建一個(gè)消耗相對較小的對象來表示,真實(shí)對象只在需要時(shí)才會(huì)被真正創(chuàng)建。虛擬代理通過使用一個(gè)小對象來代表一個(gè)大對象,可以減少系統(tǒng)資源的消耗,對系統(tǒng)進(jìn)行優(yōu)化并提高運(yùn)行速度。 概念 代理模式(Proxy Pattern) :一種對象結(jié)構(gòu)型模式。給某一個(gè)對象提供一個(gè)代理,并由代理對象控制對原對象的引用。 UML showImg(https://seg...

    zhisheng 評(píng)論0 收藏0
  • Spring框架我見(二)——代理模式

    摘要:聊完了工廠模式,下面我們來說框架中的另一個(gè)核心設(shè)計(jì)模式代理模式。這里的外賣小哥就相當(dāng)于是我們的代理。主要分為代理和代理。 聊完了工廠模式,下面我們來說Spring框架中的另一個(gè)核心設(shè)計(jì)模式——代理模式(Proxy Pattern)。 代理模式 大家可以先不用看概念,先舉個(gè)吃飯的例子:比如說我們想吃飯,我們可以選擇自己做飯吃、去飯店吃、叫外賣吃。如果我們選擇自己做著吃,我們就需要去買菜、...

    oneasp 評(píng)論0 收藏0
  • 設(shè)計(jì)模式代理模式

    摘要:虛擬代理虛擬代理把一些開銷很大的對象,延遲到真正需要它的時(shí)候才去創(chuàng)建。主要參考設(shè)計(jì)模式與開發(fā)實(shí)踐 設(shè)計(jì)模式 在面向?qū)ο筌浖O(shè)計(jì)過程中針對特定問題的簡潔而優(yōu)雅的解決方案。 這是在《設(shè)計(jì)模式》一書中對設(shè)計(jì)模式的定義。在軟件開發(fā)過程中,我們可能會(huì)遇到過這樣的情況,我們現(xiàn)在發(fā)現(xiàn)一個(gè)問題,和以前的某個(gè)問題很相似,幾乎可以用統(tǒng)一套解決方案,而且我們還發(fā)現(xiàn),在某個(gè)條件下,這個(gè)解決方案幾乎就是通用的,...

    Gilbertat 評(píng)論0 收藏0
  • Javascript設(shè)計(jì)模式——代理模式

    摘要:最近在讀設(shè)計(jì)模式與開發(fā)實(shí)踐,在這里把文中的各種設(shè)計(jì)模式寫出來,以便加深記憶,也可以分享給初學(xué)者。經(jīng)紀(jì)人可以全權(quán)代表明星和客戶談判,最后把談判結(jié)果給明星,明星決定簽約與否。這也違反了面向?qū)ο笤O(shè)計(jì)原則中的單一職責(zé)原則。 最近在讀《javascript設(shè)計(jì)模式與開發(fā)實(shí)踐》,在這里把文中的各種設(shè)計(jì)模式寫出來,以便加深記憶,也可以分享給初學(xué)者。如果你不了解設(shè)計(jì)模式,那么強(qiáng)烈推薦你閱讀一下這本書,...

    cuieney 評(píng)論0 收藏0
  • JS設(shè)計(jì)模式代理模式

    摘要:什么是代理模式代理模式,類似于明星的經(jīng)紀(jì)人,想要拜訪明星,需要先通過經(jīng)紀(jì)人的溝通。不同于裝飾器,那種動(dòng)態(tài)加載一個(gè)對象,可以說在代理模式當(dāng)中,代理是早已既定的。又稱單一功能原則,面向?qū)ο笪鍌€(gè)基本原則之一。 什么是代理模式 代理模式,類似于明星的經(jīng)紀(jì)人,想要拜訪明星,需要先通過經(jīng)紀(jì)人的溝通。而在JS當(dāng)中,如果想訪問一個(gè)類,需要通過另一個(gè)類來間接訪問 。不同于裝飾器,那種動(dòng)態(tài)加載一個(gè)對象,可...

    widuu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<