代理模式:代理模式給某一個對象提供一個代理對象,并由代理對象控制對源對象的引用。代理就是一個人或一個機構代表另一個人或者一個機構采取行動。某些情況下,客戶不想或者不能夠直接引用一個對象,代理對象可以在客戶和目標對象直接起到中介的作用。客戶端分辨不出代理主題對象與真實主題對象。代理模式可以并不知道真正的被代理對象,而僅僅持有一個被代理對象的接口,這時候代理對象不能夠創建被代理對象,被代理對象必須有系統的其他角色代為創建并傳入。
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...
}
}
我覺得可以理解為通過RealSubject的兄弟Proxy去調用RealSubject的方法
和Decorator模式的比較:
相同點:Both patterns use a proxy that forwards method calls to another object, known as the real subject.
不同點: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是對類的代理,強調的是對已有功能的代理;而decorator更多的是用于增加裝飾,來豐富類的內涵。
Adapter和Proxy的區別:
adapter是適配adaptee和target之間的關系
adaptee和target無關系,realSubject和s
這里有篇文章很不錯,鏈接一下:
http://yichao.blog.edu.cn/user2/yichaozhang/archives/2006/1501606.shtml
又找到網上另一個見解:
proxy 和adapter有一定類似,都是屬于一種銜接性質的。
區別是很明顯的,從大體上說:proxy是一種原來對象的代表,其它需要與這個對象打交道的操作都是和這個代表交涉,就象歌星的經紀人一樣。
adapter目的則不是要虛構出一個代表者,而是為應付特定使用目的,將原來的類進行一些組合。