代理模式總結

代理模式是對象的結構模式。代理模式給某一個對象提供一個代理對象,並由代理對象控制原對象的引用。

一、代理的種類

* 遠程(Remote)代理:為一個位於不同的地址空間的對象提供一個局域代表對象。這個不同的地址空間可以是在本地機器中,也可以是在另一臺機器中,遠程代理又叫做大使(Ambassador)。

* 虛擬(Virtual)代理:根據需要創建一個資源消耗較大的對象,使得此對象只在需要時才會被真正創建。

* Copy-on-Write代理:虛擬代理的一種,把複製拖延到只有在客戶端需要時,才真正採取行動。

* 保護(Protect or Access)代理:控制對一個對象的訪問,如果需要,可以給不同的用戶提供不同級別的使用權限。

* Cache代理:為某一個目標操作的結果提供臨時的存儲空間,以便多個客戶端可以共享這些數據。

* 防火牆(Firewall)代理

:保護目標,不讓惡意用戶接近。


二、代理模式的結構

代理模式涉及的角色有:

* 抽象主題角色:聲明瞭真實主題和代理主題的共同接口,這樣一來在任何可以使用真實主題的地方都可以使用代理主題。

* 代理主題(Proxy)角色:代理主題角色內部含有對真實主題的引用,從而可以在任何時候操作真實主題對象;代理主題角色提供了一個與真實主題角色相同的接口,以便可以再任何時候都可以替代真實主題;控制對真實主題的引用,負責在需要的時候創建真實主題對象;代理角色通常在講客戶端調用傳遞給真實的主題之前或者之後,都要執行某個操作,而不是單純地將調用傳遞給真實主題對象。

* 真實主題角色:定義了代理角色所代表的真實對象。

三、java對代理模式的支持

java語言通過在java.lang.reflect庫中提供下面三個類直接支持代理模式:Proxy,InvocationHandler和Method。

其中Proxy類使得設計師能夠在運行時間創建代理對象。當系統有了一個代理對象後,對原對象的方法調用會首先被分派到一個調用處理器(Invocation Handler).

程序可以在調用處理器的invoke()方法中截獲這個調用,進行額外的操作。顯然,java所提供的這一支持是建立在反射(reflection)的基礎之上的。

設計師可以按照下面的步驟創建動態代理對象:

*指明一系列的接口來創建一個代理對象。

*創建一個調用處理器(Invocation Handler)對象。

*將這個代理指定為某個其他對象的代理對象。

*在調用處理器的invoke()方法中採取代理,一方面將調用傳遞給真實對象,另一方面執行各種需要做的操作。


代理模式總結


分享到:


相關文章: