基本概念
代理模式为其他对象提供一种代理以控制对这个对象的访问。
结构图
上图摘自《大话设计模式》
应用场景
1.远程代理,即为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
2.虚拟代理,即根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
3.安全代理,即用来控制真实对象时的权限。
4.智能指引,即当调用真实对象时,代理处理另外一些事。
源码示例
1.先写一个被代理类和代理类都需要实现的接口
package com.spook.proxy;
/**
* 被代理对象类和代理类需要实现的接口
*/
public interface Subject {
public void request();
}
2.创建被代理的对象类
package com.spook.proxy;
/***
* 被代理的对象
*/
public class RealSubject implements Subject {
@Override
public void request() {
// TODO Auto-generated method stub
System.out.println("被代理的对象发出请求");
}
}
3.创建代理类
package com.spook.proxy;
/**
* 代理类
*/
public class Proxy implements Subject {
private RealSubject realSubject;
@Override
public void request() {
// TODO Auto-generated method stub
if (realSubject == null) {
realSubject = new RealSubject();
}
realSubject.request();
}
}
4.测试类
package com.spook.proxy;
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
Proxy p = new Proxy();
p.request();
}
}
运行测试类输出如下内容:
被代理的对象发出请求