給某一個對象提供一個代理對象,并由代理對象控制對原對象的引用。
代理的種類:
1. 遠程(Remote)代理:為一個位于不同的地址空間的對象提供一個局域代表對象。這個不同的地址空間可以是在本機器中,也可是在另一臺機器中。
2. 虛擬(Virtual)代理:根據需要創建一個資源消耗較大的對象,使得此對象只在需要時才會被真正創建。
3. Copy-on-Write代理:虛擬代理的一種。把復制(克隆)拖延到只有在客戶端需要時,才真正采取行動。
4. 保護(Protect or Access)代理:控制對一個對象的訪問,如果需要,可以給不同的用戶提供不同級別的使用權限。
5. Cache代理:為某一個目標操作的結果提供臨時的存儲空間,以便多個客戶端可以共享這些結果。
6. 防火墻(Firewall)代理:保護目標,不讓惡意用戶接近。
7. 同步化(Synchronization)代理:使幾個用戶能夠同時使用一個對象而沒有沖突。
8. 智能引用(Smart Reference)代理:當一個對象被引用時,提供一些額外的操作,比如將對此對象調用的次數記錄下來等。
示意類圖:

1. com.cleversoft.designpatterns.proxy.Subject.java:
package?com.cleversoft.designpatterns.proxy;


public?interface?Subject?
{
????public?void?request();
}
2. com.cleversoft.designpatterns.proxy.RealSubject.java:
package?com.cleversoft.designpatterns.proxy;


public?class?RealSubject?implements?Subject?
{


????public?void?request()?
{
????????System.out.println("From?real?subject");

????}

}
3. com.cleversoft.designpatterns.proxy.ProxySubject.java:
package?com.cleversoft.designpatterns.proxy;


public?class?ProxySubject?implements?Subject?
{
????private?RealSubject?realSubject;


????public?ProxySubject()?
{
????}


????public?void?request()?
{
????????preRequest();


????????if?(realSubject?==?null)?
{
????????????realSubject?=?new?RealSubject();
????????}
????????realSubject.request();

????????postRequest();
????}


????private?void?postRequest()?
{
????????System.out.println("From?post?request");

????}


????private?void?preRequest()?
{
????????System.out.println("From?pre?request");

????}

}
4. com.cleversoft.designpatterns.proxy.Client.java:
package?com.cleversoft.designpatterns.proxy;


public?class?Client?
{
????private?static?Subject?subject;


????public?static?void?main(String[]?args)?
{
????????subject?=?new?ProxySubject();
????????subject.request();
????}

}
參考資料:
1. 《Java與模式》
代理的種類:
1. 遠程(Remote)代理:為一個位于不同的地址空間的對象提供一個局域代表對象。這個不同的地址空間可以是在本機器中,也可是在另一臺機器中。
2. 虛擬(Virtual)代理:根據需要創建一個資源消耗較大的對象,使得此對象只在需要時才會被真正創建。
3. Copy-on-Write代理:虛擬代理的一種。把復制(克隆)拖延到只有在客戶端需要時,才真正采取行動。
4. 保護(Protect or Access)代理:控制對一個對象的訪問,如果需要,可以給不同的用戶提供不同級別的使用權限。
5. Cache代理:為某一個目標操作的結果提供臨時的存儲空間,以便多個客戶端可以共享這些結果。
6. 防火墻(Firewall)代理:保護目標,不讓惡意用戶接近。
7. 同步化(Synchronization)代理:使幾個用戶能夠同時使用一個對象而沒有沖突。
8. 智能引用(Smart Reference)代理:當一個對象被引用時,提供一些額外的操作,比如將對此對象調用的次數記錄下來等。
示意類圖:
1. com.cleversoft.designpatterns.proxy.Subject.java:







2. com.cleversoft.designpatterns.proxy.RealSubject.java:














3. com.cleversoft.designpatterns.proxy.ProxySubject.java:










































4. com.cleversoft.designpatterns.proxy.Client.java:















參考資料:
1. 《Java與模式》
|
|
歡迎大家訪問我的個人網站 萌萌的IT人