12、PROXY?跟MM在網(wǎng)上聊天,一開(kāi)頭總是“hi,你好”,“你從哪兒來(lái)呀?”“你多大了?”“身高多少呀?”這些話,真煩人,寫個(gè)程序做為我的Proxy吧,凡是接收到這些話都設(shè)置好了自動(dòng)的回答,接收到其他的話時(shí)再通知我回答,怎么樣,酷吧。
代理模式:代理模式給某一個(gè)對(duì)象提供一個(gè)代理對(duì)象,并由代理對(duì)象控制對(duì)源對(duì)象的引用。代理就是一個(gè)人或一個(gè)機(jī)構(gòu)代表另一個(gè)人或者一個(gè)機(jī)構(gòu)采取行動(dòng)。某些情況下,客戶不想或者不能夠直接引用一個(gè)對(duì)象,代理對(duì)象可以在客戶和目標(biāo)對(duì)象直接起到中介的作用。客戶端分辨不出代理主題對(duì)象與真實(shí)主題對(duì)象。代理模式可以并不知道真正的被代理對(duì)象,而僅僅持有一個(gè)被代理對(duì)象的接口,這時(shí)候代理對(duì)象不能夠創(chuàng)建被代理對(duì)象,被代理對(duì)象必須有系統(tǒng)的其他角色代為創(chuàng)建并傳入。
public interface Subject {
public void methodA();
}
public class RealSubject implements Subject {
public void methodA() {
System.out.println("...");
}
}
public class Proxy implements Subject {
private RealSubject r;
public void methodA() {
if(r == null) {
r = RealSubject();
}
r.methodA();
//do something...
}
}
我覺(jué)得可以理解為通過(guò)RealSubject的兄弟Proxy去調(diào)用RealSubject的方法
和Decorator模式的比較:
相同點(diǎn):Both patterns use a proxy that forwards method calls to another object, known as the real subject.
不同點(diǎn):with the Proxy pattern, the relationship between a proxy and the real subject is typically set at compile time, whereas decorators can be recursively constructed at runtime.
從另一種角度考慮:proxy是對(duì)類的代理,強(qiáng)調(diào)的是對(duì)已有功能的代理;而decorator更多的是用于增加裝飾,來(lái)豐富類的內(nèi)涵。
Adapter和Proxy的區(qū)別:
adapter是適配adaptee和target之間的關(guān)系,proxy是realSubject對(duì)subject的代理。
adaptee和target無(wú)關(guān)系,realSubject和subject有繼承關(guān)系。這就是他們的區(qū)別。
這里有篇文章很不錯(cuò),鏈接一下:
http://yichao.blog.edu.cn/user2/yichaozhang/archives/2006/1501606.shtml
又找到網(wǎng)上另一個(gè)見(jiàn)解:
proxy 和adapter有一定類似,都是屬于一種銜接性質(zhì)的。
區(qū)別是很明顯的,從大體上說(shuō):proxy是一種原來(lái)對(duì)象的代表,其它需要與這個(gè)對(duì)象打交道的操作都是和這個(gè)代表交涉,就象歌星的經(jīng)紀(jì)人一樣。
adapter目的則不是要虛構(gòu)出一個(gè)代表者,而是為應(yīng)付特定使用目的,將原來(lái)的類進(jìn)行一些組合。
posted on 2008-01-24 13:48
EvanLiu 閱讀(628)
評(píng)論(0) 編輯 收藏 所屬分類:
設(shè)計(jì)模式