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

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. 遠(yuǎn)程(Remote)代理:為一個(gè)位于不同的地址空間的對(duì)象提供一個(gè)局域代表對(duì)象。這個(gè)不同的地址空間可以是在本機(jī)器中,也可是在另一臺(tái)機(jī)器中。
2. 虛擬(Virtual)代理:根據(jù)需要?jiǎng)?chuàng)建一個(gè)資源消耗較大的對(duì)象,使得此對(duì)象只在需要時(shí)才會(huì)被真正創(chuàng)建。
3. Copy-on-Write代理:虛擬代理的一種。把復(fù)制(克隆)拖延到只有在客戶端需要時(shí),才真正采取行動(dòng)。
4. 保護(hù)(Protect or Access)代理:控制對(duì)一個(gè)對(duì)象的訪問(wèn),如果需要,可以給不同的用戶提供不同級(jí)別的使用權(quán)限。
5. Cache代理:為某一個(gè)目標(biāo)操作的結(jié)果提供臨時(shí)的存儲(chǔ)空間,以便多個(gè)客戶端可以共享這些結(jié)果。
6. 防火墻(Firewall)代理:保護(hù)目標(biāo),不讓惡意用戶接近。
7. 同步化(Synchronization)代理:使幾個(gè)用戶能夠同時(shí)使用一個(gè)對(duì)象而沒(méi)有沖突。
8. 智能引用(Smart Reference)代理:當(dāng)一個(gè)對(duì)象被引用時(shí),提供一些額外的操作,比如將對(duì)此對(duì)象調(diào)用的次數(shù)記錄下來(lái)等。
示意類圖:
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與模式》
|
|
歡迎大家訪問(wèn)我的個(gè)人網(wǎng)站 萌萌的IT人