代理模式是指给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用(接口的引用)的结构模式。它的核心思想在于限制直接访问对象,而是通过代理对象访问目标对象,这样做的好处在于保护了目标对象,即使目标对象发生变化,也不会影响到访问者,因为访问者拿到的始终都是代理对象,这保证了目标对象的扩展性。另外,代理对象还可以起到拦截代理方法,改变原方法的参数和返回值以满足代理自身的需求。
代理模式的角色分配:
目标对象:真正做事的人
代理对象:持有目标对象,具有和目标对象相同的做事能力
访问者:需要人做事的人
以下是示例:
经理跟助理说,找人把某件事做了,这里面的经理就是访问者,助理就是代理对象,助理找来做事的人就是目标对象。这里面,经理实际操作的是助理,而不是助理找的人,经理不直接操作助理找的人。代码实现:
首先定义一个接口,助理和目标对象所具有的共同的做事能力:
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();
}
网友评论