摘要:目錄代理模式為什么使用代理模式應(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
摘要:我們今天也來做一個(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é)我們介紹了...
摘要:我們今天也來做一個(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é)我們介紹了...
摘要:中的詳解必修個(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ì)于 ...
摘要:受知乎文章和設(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鎖子類了解一下 線程池你真不來了解一下...
閱讀 918·2021-10-13 09:39
閱讀 3571·2021-09-26 10:16
閱讀 2932·2019-08-30 15:54
閱讀 1070·2019-08-30 14:22
閱讀 2913·2019-08-29 15:39
閱讀 3289·2019-08-27 10:52
閱讀 838·2019-08-26 13:59
閱讀 1750·2019-08-26 12:20