Java中除去有設計原則之外,還有23中設計模式。
這些模式都是前輩們一點一點積累下來,一直在改進,一直在優化的,而這些設計模式可以解決一些特定的問題。
並且在這些模式中,可以說是將語言的使用體現的淋漓盡致。
那我們今天要學習 結構型模式 中的 代理模式 !
代理模式
這個是結構型模式中的第一個模式,叫代理模式。我們先來百度百科一下, 看看啥叫代理模式
我們來看後一句話,它說代理者可以作任何東西的接口,好比網上鍊接,存儲器中的大對象,文件等等。
額...其實看完這句話我們還是不知道啥是代理模式,不要慌,繼續往下看,找到簡介
這個我們先就看第一段(主要下面涉及到另外一個我們沒有學過的設計模式,所以暫時先不看,但你如果有興趣,可以自己去研究研究),通過它這個的敘說,我們就能大致明白了。
代理模式就好比我們通過中介購買房子一樣,這個中介就是代理者,我們就是客戶端,而目標對象就是房子的主人。我們通過和中介的溝通,協商,看房,最後購買上房子,在這個過程中,我們自始至終都沒有和房子的主人打交道。
上面說的這個是我們生活中的,下面我來舉例說一下我們軟件設計中的。
比如我們現在要查看A這個企業的數據庫,但是A不能說直接就把數據庫的連接信息,用戶名密碼給你,萬一你給人家把庫一刪,跑路了怎麼辦。所以A這個企業就需要找一個代理者,你直接和這個代理者溝通,需要看啥,讓代理者進行查看。到時候如果A企業的數據庫出問題也不會找到你的頭上。
代理模式的定義與優缺點
代理模式的定義:由於某些原因需要給某對象提供一個代理以控制對該對象的訪問。這時,訪問對象不適合或者不能直接引用目標對象,代理對象作爲訪問對象和目標對象之間的中介。
優點:
1. 代理模式,起到了一箇中間作用,並且很好地保護目標對象的安全。
2. 代理對象(也就是中介)可以擴展目標對象的功能。(就好比買房子,中介自己掏錢,多送你一個茶几、沙發啥的)
3. 代理模式能把客戶端和目標對象分離,在一定程度上降低了系統的耦合度。
缺點:
1. 在客戶端和目標對象之間塞一個代理,這樣會造成請求速度變慢。(你直接和房東溝通,和你找中介,中介找房東溝通)
2. 增加了系統複雜度。(以前維護客戶端和目標對象就好,現在又多了一箇中介。)
代理模式的結構與實現
代理模式是由三塊內容組成:
1. 抽象主題(Subject),抽象主題實際上就是一個接口,主要是把目標對象的一些信息進行抽象
2. 真實主題(Real Subject),實現抽象主題,這個就好比房子的主人
3. 代理(Proxy),(這個就是中介)代理中提供了與真實主題相同的接口,其內部含有對真實主題的引用,它可以訪問、控制或擴展真實主題的功能。(也就是送沙發送茶几啥的,這就是擴展)
知道了這個模式的結構內容之後,我們來自己定一下需求,這裏我就不弄新的例子了,就實現一下上面買房子的案例。
1. 首先我們先定義一下這個抽象主題(Subject),注意啊,這是一個接口!!!
在這個接口中,我們提供一個看房子的方法
2. 接着,再定義一個真實主題(Real Subject),順便讓這個真實主題去實現上面的這個接口
這裏我們輸出一句話,這個房子很大很大,採光超好,下水不堵塞,隔音槓槓的。
3. 好,有了這些之後,我們再來弄一個代理。這裏這個代理也需要實現抽象主題(原因是代理也需要知道自己要代理啥,不告訴它,它就懵逼了)
我們上面說了,這個代理必須裏面含有真實主題的引用,所以,我們再定義一個房東。
我們在這個lookHouse中實現一下房東所交代的內容。
當然,我們也來添加一些擴展
注意啊,這個是私有的,因爲是中介自己擴展的。
接下來,我們來測試一下。弄個測試類,ProxyTest
到這裏爲止呢,我們的代理模式就學習完成了。
大家好好看一下,多練習一下。有不懂的可以直接加我QQ:2100363119
ps:上方二維碼是我個人的公衆號,最近剛開不久,我每個月都會更新一些活動,希望大家可以積極參加,活動詳情可以關注公衆號之後,回覆“活動”二字進行查看,參加。