成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

設計模式之代理模式

enda / 2089人閱讀

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

一、定義

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

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

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

二、UML

來源:《大話設計模式》


三、例子實現(xiàn)

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

1、接口,定義真實火車站,還有代理提供的服務。

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

2、火車站類,真正提供買票服務

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

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

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

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了,跑去了也不一定賣給你,給點手續(xù)費,我保證幫你買到!!");        
        //真正去購票
        trainServiceInf.saleTicket();    
    }
}

客戶端調(diào)用

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

四、應用場景

1、遠程代理

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

2、虛擬代理

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

3、安全代理

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

4、智能指引

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

五、總結(jié)說明

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


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

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

相關(guān)文章

  • PHP設計模式代理模式

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

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

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

    oneasp 評論0 收藏0
  • 設計模式代理模式

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

    Gilbertat 評論0 收藏0
  • Javascript設計模式——代理模式

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

    cuieney 評論0 收藏0
  • JS設計模式代理模式

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

    widuu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<