5_代理模式
代理模式
追求者通过代理送东西给被被追求者
没有代理的代码
被追求者不知道追求者!!!,追求者只能通过代理,代理知道被追求者
那么我们可以如下图所示
public class Proxy implements Subject{
private RealSubject realSubject;
public Proxy(RealSubject real){
this.realSubject=real;
}
public Proxy(){
if(realSubject==null){
this.realSubject = new RealSubject();
}
}
@Override
public void Request() {
realSubject.Request();
}
}
public class RealSubject implements Subject{
@Override
public void Request() {
System.out.println("请求");
}
}
public interface Subject {
void Request();
}
代理模式的应用场合
- 远程代理,为一个对象再不同的地址空间提供局部代表,这样可以隐藏对象存在不同空间的事实
- 虚拟代理,根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象,比如有一个很大的html文件,我们可以很快打开它,但是图片使一张一张下载的,这时候代理存放的是这些文件的地址。
- 安全代理,用来控制真实对象访问的权限。一般是用于对象的不同权限访问(因为一个代理可以对应多个对象,通过代理来选择相应的对象)
- 智能代理,调用真实代理时,代理处理一些例外的事(使用父类的方法来套娃)