1、定義代理模式緩存
代理模式 爲另外一個對象提供一個替身或佔位符以控制對這個對象的訪問。類圖:圖01.jpg安全
首先是Subject,它爲RealSubject和Proxy提供了接口。經過實現同一接口,Proxy在RealSubject出現的地方取代它。網絡
RealSubject是真正作事的對象,它是被Proxy代理和控制訪問的對象。app
Proxy持有RealSubject的引用。在某些例子中,Proxy還會負責RealSubject對象的建立與銷燬。客戶和RealSubject的交互都必須經過Proxy。由於Proxy和RealSubject實現相同的接口(Subject),因此任何用到RealSubject的地方,均可以用Proxy取代。Proxy也控制了對RealSubject的訪問,在某些狀況下,咱們須要這樣的控制。這些狀況包括RealSubject是遠程的對象、RealSubject建立開銷大,或RealSubject須要被保護。設計
有時,咱們將代理描述成另外一個對象的「表明」。使用代理模式建立表明(representative)對象,讓表明對象控制某對象的訪問,被代理的對象能夠是遠程的對象、建立開銷大的對象或須要安全控制的對象。代理
可是代理控制訪問怎麼解釋呢?這聽起來有一點奇怪。代理之因此須要控制訪問,是由於咱們的客戶(監視器)不知道如何和遠程對象溝通。幾種代理控制訪問的方式:對象
一、遠程代理控制訪問遠程對象。接口
二、虛擬代理控制訪問建立開銷大的資源。資源
三、保護代理基於權限控制對資源的訪問。同步
2、代理的簡單介紹
一、遠程代理能夠做爲另外一個JVM上對象的本地表明。調用代理的方法,會被代理利用網絡轉發到遠程執行,並將結果經過網絡返回給代理,再由代理將結果轉給客戶。圖02.jpg
二、虛擬代理做爲建立開銷大的對象的表明。虛擬代理常常直到咱們真正須要一個對象的時候才建立它,當對象在建立前和建立中時,由虛擬代理來扮演對象的替身。對象建立後,代理就會將請求直接委託給對象。圖03.jpg
3、回顧要點
一、代理模式爲另外一個對象提供表明,以便控制客戶對對象的訪問,管理訪問的方式有許多中。
二、遠程代理管理客戶和遠程對象之間的交互。
三、虛擬代理控制訪問實例化開銷大的對象。
四、保護代理基於調用者控制對對象方法的訪問。
五、代理模式有許多變體,例如:緩存代理、同步代理、防火牆代理和寫入時複製代理。
六、代理在結構上相似裝飾者,可是目的不一樣。
七、裝飾者模式爲對象加上行爲,而代理則是控制訪問。
八、Java內置的代理支持,能夠根據須要創建動態代理,並將全部調用分配到所選的處理器。
九、就和其餘的包裝者(wrapper)同樣,代理會形成你的設計中類的數目增長。