代理模式的典型例子,java代理模式的典型例子?

生活中,我們買房子或者賣房子的時候,大多數(shù)的情況下我們是不能直接找到并面對客戶的,這個時候我們往往會借助中介或者代理的方式來完成我們的想法。與此類似的,在軟件設(shè)計中,使用代理模式的例子也很多,下面我們簡要說明。


定義與特點

由于某些原因需要給某對象提供一個代理以控制對該對象的訪問。這時,訪問對象不適合或者不能直接引用目標對象,代理對象作為訪問對象和目標對象之間的中介。簡單來說就是,為一個類(委托類)創(chuàng)建一個代理類,由代理類來代表它來對外提供功能。


代理模式的優(yōu)缺點:

優(yōu)點有:

  • 在客戶端與目標對象之間起到一個中介作用和保護目標對象的作用;
  • 代理對象可以擴展目標對象的功能;
  • 將客戶端與目標對象分離,在一定程度上降低了系統(tǒng)的耦合度,增加了程序的可擴展性

缺點是:

  • 代理模式會造成系統(tǒng)設(shè)計中類的數(shù)量增加
  • 在客戶端和目標對象之間增加一個代理對象,會造成請求處理速度變慢;
  • 無故增加了系統(tǒng)的復雜度;


代理模式的構(gòu)造方式:

首先要明確兩個角色,一個是委托類,一個是代理類。二者共同實現(xiàn)一個公共接口。

沿著這個思路我們設(shè)計這樣一個場景。比如富豪張三(Zhangsan)無故被人抹黑造謠,由于自己公務(wù)繁忙,無法到公共場合為自己發(fā)表清白聲明,于是找到了律師(Lawyer)代自己公開進行一份聲明。下面就是我們的代碼秀:

//公共接口
interface Announce {
    //對外聲明
    void declare();
}

//委托人
class Zhangsan implements Announce {
   //對外聲明
    public void declare() {
        System.out.println("我是張三,我是清白的。巴拉巴拉巴拉巴拉巴拉啦啦啦啦啦");
    }
}

//代理人
class Lawyer implements Announce {
    //聲明為張三提供服務(wù)
  private Announce  zhangsan = new Zhangsan();
  
    //對外聲明
    public void declare() {
        this.preDeclaration()
         //張三的實際發(fā)聲
        zhangsan.declare();
        this.postDeclaration();
    }

		//禮貌起見,聲明之前介紹自己身份
		private void preDeclaration() {
       System.out.println("大家好,我是張三先生的私人律師");
    }

		//禮貌起見,聲明完成之后可以致謝
		private void postDeclaration() {
       System.out.println("感謝大家對張三先生的支持");
    }
}


//寫了半天,我們來測試下實際效果
public class ProxyAnnounce{
  		public static void main(String[] args){
        private Announce  lawyer = new Lawyer();
        lawyer.declare();
      }
}

輸出結(jié)果為:

大家好,我是張三先生的私人律師
我是張三,我是清白的。巴拉巴拉巴拉巴拉巴拉啦啦啦啦啦
感謝大家對張三先生的支持


上面是一個很簡單的例子,可以看出,我們想對外開放某些功能,就可以將這些功能在代理類中被引用,如此一來,屏蔽了我們不想外露的功能,只將我們想開放的功能開放出來。亦即委托類中其實是可以有很多方法的,很多功能的,我們可以酌情對外開放,代理類猶如一道大門,將委托類與外部調(diào)用者隔絕開來,只將部分功能賦予這個大門,來代替委托類行使這個功能,哪怕最終還是要牽扯到自身(因為最終還是要調(diào)用委托類的對應方法實現(xiàn))。


如若有想學習和交流Java的朋友,可添加微信號:zhuawac,請備注來意,否則會被拒哦!

好了,這篇文章的內(nèi)容發(fā)貨聯(lián)盟就和大家分享到這里,如果大家網(wǎng)絡(luò)推廣引流創(chuàng)業(yè)感興趣,可以添加微信:80709525  備注:發(fā)貨聯(lián)盟引流學習; 我拉你進直播課程學習群,每周135晚上都是有實戰(zhàn)干貨的推廣引流技術(shù)課程免費分享!


版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 sumchina520@foxmail.com 舉報,一經(jīng)查實,本站將立刻刪除。

您可能還會喜歡:

發(fā)表評論

◎歡迎參與討論,請在這里發(fā)表您的看法、交流您的觀點。