概念
为另一个对象提供一个替身以控制对该对象的访问
作用
- 远程代理控制访问远程对象
- 保护代理控制对资源的访问权限
- 虚拟代理控制访问创建开销大的对象
例子
代理对象和被代理对象实现同一接口,且代理对象要持有被代理对象的引用
公共接口
public interface ProxyInterface {
void visit ();
}
代理
public class Proxy implements ProxyInterface{
private ProxyInterface target; //持有被代理类
public Proxy(ProxyInterface target)
{
this.target=target;
}
@Override
public void visit() {
// TODO Auto-generated method stub
target.visit();
}
}
代理目标
public class Target implements ProxyInterface{
@Override
public void visit() {
// TODO Auto-generated method stub
System.out.println("我是被代理对象");
}
}
测试代码
public class test {
public static void main(String[] args)
{
Proxy proxy=new Proxy(new Target());
proxy.visit();
}
}
结果
我是被代理对象
增加功能
可在代理类中增加如权限验证,事务管理等功能
//修改proxy中的visit()方法
public void visit() {
// TODO Auto-generated method stub
System.out.println("before visited");
target.visit();
System.out.println("after visited");
}
before visited
我是被代理对象
after visited