Java23中設計模式6——結構型模式之代理模式

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:上方二維碼是我個人的公衆號,最近剛開不久,我每個月都會更新一些活動,希望大家可以積極參加,活動詳情可以關注公衆號之後,回覆“活動”二字進行查看,參加。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章