代理模式是指給某一個對象提供一個代理對象,并由代理對象控制對原對象的引用(接口的引用)的結構模式。它的核心思想在于限制直接訪問對象,而是通過代理對象訪問目標對象,這樣做的好處在于保護了目標對象,即使目標對象發(fā)生變化,也不會影響到訪問者,因為訪問者拿到的始終都是代理對象,這保證了目標對象的擴展性。另外,代理對象還可以起到攔截代理方法,改變原方法的參數和返回值以滿足代理自身的需求。
代理模式的角色分配:
目標對象:真正做事的人
代理對象:持有目標對象,具有和目標對象相同的做事能力
訪問者:需要人做事的人
以下是示例:
經理跟助理說,找人把某件事做了,這里面的經理就是訪問者,助理就是代理對象,助理找來做事的人就是目標對象。這里面,經理實際操作的是助理,而不是助理找的人,經理不直接操作助理找的人。代碼實現:
首先定義一個接口,助理和目標對象所具有的共同的做事能力:
public interface DoSth{
public void doSth(){
}
}
定義目標對象,以及所具有的做事能力:
public class DesObj implements DoSth{
public void doSth(){
}
}
定義代理對象,持有目標對象,以及與目標對象相同的做事能力:
public class ProxyObj implements DoSth{
DesObj desObj;
public void doSth(DesObj desObj){
this.desObj = desObj;
}
public void doSth(){
this.desObj.doSth();
}
}
定義訪問者:
public class ManagerObj{
DesObj desObj = new DesObj();
ProxyObj obj = new ProxyObj();
obj.doSth(desObj);
obj.doSth();
}