代理模式:为其他对象提供一种代理,以控制对这个对象的访问。
应用场景:
1、远程代理。为一个对象在不同的地址空间提供局部代表,这样可以隐藏对象存在于不同地址空间的事实。
例如:webservice
2、虚拟代理。根据需要创建开销很大的对象。通过它来存放实例化(及new)需要很长时间才能完成的对象。
例如:打开淘宝网页时,很多图片,但图片并不是很快全部显示,而是一张一张的加载出来,那些未显示的图片就是通过虚拟代理来代替真实图片的路径和尺寸。
3、安全代理。控制真实对象的不同访问权限。
4、智能指引。是指调用真实对象时,代理处理另外一些事情。
例如:当对象不再被引用时,代理释放它。
代码实现:
public interface Subject {
public String request();
}
public class RealSubject implements Subject {
public String request() {
System.out.println("真实的请求");
return null;
}
}
public class Proxy implements Subject {
private RealSubject realSubject;
public Proxy(RealSubject realSubject){
this.realSubject = realSubject;
}
public String request() {
this.realSubject.request();
return null;
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
Proxy proxy = new Proxy(realSubject);
proxy.request();
}
}