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

資訊專欄INFORMATION COLUMN

設(shè)計(jì)模式(7)代理模式(講解+應(yīng)用)

JasinYip / 3385人閱讀

摘要:目錄代理模式為什么使用代理模式應(yīng)用實(shí)例代理模式對(duì)于代理模式,和委托方式分不開,感覺委托和代理沒有什么區(qū)別,而委托卻不被稱做一個(gè)設(shè)計(jì)模式,今天再次看代理模式,才有所理解。回到正題代理模式為對(duì)象提供一個(gè)替身或者是占一個(gè)位子,從而控制對(duì)其訪問。

目錄

代理模式

為什么使用代理模式

應(yīng)用實(shí)例

代理模式

對(duì)于代理模式,和委托方式分不開,感覺委托和代理沒有什么區(qū)別,而委托卻不被稱做一個(gè)設(shè)計(jì)模式,今天再次看代理模式,才有所理解。從這一點(diǎn)也發(fā)現(xiàn)了一個(gè)問題,有些時(shí)候,我們?cè)偃タ匆槐炯夹g(shù)的書的時(shí)候,第一遍有些概念往往晦澀難懂,特別是在未看設(shè)計(jì)模式去看《Thinking in Java》的時(shí)候,當(dāng)時(shí)看的就會(huì)有點(diǎn)小焦慮,看不下去,想跳過去吧,有會(huì)有種自我譴責(zé)的意識(shí)出現(xiàn),現(xiàn)在看來對(duì)于一些概念不懂的甚至是一知半解的,其實(shí)沒有必要去死扣,跳過去接著看,然后等著再回過頭看一遍,很多概念就不會(huì)讓你感覺像是第一次那樣晦澀,同時(shí)對(duì)于一些好書,即使第一次看過去,感覺沒什么問題,在回讀一遍,你還是會(huì)發(fā)現(xiàn)會(huì)有不同的理解和感悟的。
回到正題

代理模式:為對(duì)象提供一個(gè)替身或者是占一個(gè)位子,從而控制對(duì)其訪問。

代理VS委托*
而我們常用的委托呢?是在類的內(nèi)部創(chuàng)建一個(gè)局部變量,用來表示該對(duì)象,然后通過某種方法或者是構(gòu)造函數(shù)將實(shí)例注入,這看起來確實(shí)是給對(duì)象占了一個(gè)位子,但是注意代理模式的主要目的是用來控制對(duì)其訪問,而我們使用的委托模式是起不到的這個(gè)作用的,因?yàn)閷?shí)例都是通過方法從外部注入進(jìn)來的,又談何對(duì)其在類內(nèi)部進(jìn)行訪問控制。

為什么使用代理模式

當(dāng)我們有一個(gè)數(shù)據(jù)集,不同的用戶對(duì)該數(shù)據(jù)集有不同的權(quán)限,因此如果我們對(duì)控制數(shù)據(jù)集的對(duì)象進(jìn)行權(quán)限的設(shè)定以此來控制我們數(shù)據(jù)的存取,從而對(duì)我們的數(shù)據(jù)起到一個(gè)保護(hù)的作用。

主題抽象類 
 abstract   public   class  Subject  {
    abstract   public   void  request(); 
}   


真實(shí)主題類 
 public   class  RealSubject  extends  Subject  { 
     public  RealSubject()  { }  
    
     public   void  request()  { 
        System.out.println( " From real subject. " ); 
    }  
}  


代理類
public   class  ProxySubject  extends  Subject  { 
     private  RealSubject realSubject;  // 以真實(shí)角色作為代理角色的屬性  
 
      public  ProxySubject()  { }  


     public   void  request()  {  // 該方法封裝了真實(shí)對(duì)象的request方法  
         preRequest(); 

         if ( realSubject  ==   null  )  { 

            realSubject  =   new  RealSubject(); 
        }  

        realSubject.request();  // 此處執(zhí)行真實(shí)對(duì)象的request方法  
 
        postRequest(); 
    } 
 

通過一個(gè)代理類,將我們真實(shí)的實(shí)例作為一個(gè)屬性,然后在代理類中執(zhí)行相應(yīng)的操作。有什么用途呢,比如上面某一個(gè)主題的一個(gè)方法并不是對(duì)沒一個(gè)用戶都開發(fā)權(quán)限的,所以在進(jìn)行操作之前,我們要對(duì)該權(quán)限進(jìn)行一個(gè)判斷,這樣我們可以在代理類中進(jìn)行一個(gè)判斷,同時(shí)還可以在執(zhí)行完方法之后進(jìn)行一下其它的操作。

應(yīng)用實(shí)例

現(xiàn)實(shí)中的應(yīng)用的比較多的有遠(yuǎn)程代理,本地的對(duì)象,在服務(wù)端還有一個(gè)對(duì)象,服務(wù)端對(duì)對(duì)象執(zhí)行的操作,本地端就會(huì)執(zhí)行,但是礙于對(duì)其了解不深,也咩有拿這個(gè)來舉例子,實(shí)際開發(fā)中用到代理的還有很多地方,比如

防火墻代理:對(duì)網(wǎng)絡(luò)資源進(jìn)行保護(hù),防止惡意侵害

緩存代理:為開銷大的計(jì)算結(jié)果提供緩存

等等,

下篇更模板方法,對(duì)于模板方法和鉤子方法通過Android的View相關(guān)進(jìn)行舉例。

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

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

相關(guān)文章

  • php設(shè)計(jì)模式

    摘要:我們今天也來做一個(gè)萬能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...

    Dionysus_go 評(píng)論0 收藏0
  • php設(shè)計(jì)模式

    摘要:我們今天也來做一個(gè)萬能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...

    vspiders 評(píng)論0 收藏0
  • Java 總結(jié)

    摘要:中的詳解必修個(gè)多線程問題總結(jié)個(gè)多線程問題總結(jié)有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升開源的運(yùn)行原理從虛擬機(jī)工作流程看運(yùn)行原理。 自己實(shí)現(xiàn)集合框架 (三): 單鏈表的實(shí)現(xiàn) 自己實(shí)現(xiàn)集合框架 (三): 單鏈表的實(shí)現(xiàn) 基于 POI 封裝 ExcelUtil 精簡(jiǎn)的 Excel 導(dǎo)入導(dǎo)出 由于 poi 本身只是針對(duì)于 ...

    caspar 評(píng)論0 收藏0
  • 給女朋友講解什么是代理模式

    摘要:受知乎文章和設(shè)計(jì)模式之禪的啟發(fā),我也來搞一篇腦洞小開的文章由標(biāo)題可知,這篇文章是寫給我女朋友看的。于是這就讓經(jīng)紀(jì)人對(duì)粉絲說只有萬,我才會(huì)寫代碼。 前言 只有光頭才能變強(qiáng) 回顧前面: ThreadLocal就是這么簡(jiǎn)單 多線程三分鐘就可以入個(gè)門了! 多線程基礎(chǔ)必要知識(shí)點(diǎn)!看了學(xué)習(xí)多線程事半功倍 Java鎖機(jī)制了解一下 AQS簡(jiǎn)簡(jiǎn)單單過一遍 Lock鎖子類了解一下 線程池你真不來了解一下...

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

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

0條評(píng)論

閱讀需要支付1元查看
<