代理模式(proxy)白话就是一个人替另外一个人做一些事情。
代理模式所涉及的角色:
i)抽象主题角色:声明了真实主题与代理主题的共同接口。
ii)代理主题角色:包含了真实主题角色的引用,在将客户端的调用传递给真实主题角色之前或者之后调用某些
方法而不是直接把调用传递给真实主题角色。
iii)真实主题角色:定义了代理主题所代表的真实对象
例如:
Subject抽象类:abstract public class Subject{
abstract public void request();
}
RealSubject类: public class RealSubject extends Subject{
public void request(){
System.out.println("实现请求");
}
}
ProxySubject类:public class ProxySubject extends Subject{
//对真实主题的引用,用来操作真实主题
private RealSubject realSubject;
//请求前操作
public void preRequest(){
System.out.println("请求前操作");
}
//请求后操作
public void postRequest(){
System.out.println("请求后操作");
}
//实现请求方法
public void request(){
preRequest();
if(realSubject==null){realSubject = new RealSubject();}
realSubject.request();
postRequest();
}
}
客户端调用方式:Subject subject = new ProxySubject();
subject.request();