代理模式:
给某一个对象提供一个代理对象,并有代理对象控制对原对象的引用。通常,一个客户不想或者不能直接引用一个对象,而代理对象可以在客户端与目标对象之间起到中介作用。
结构:
抽象主题角色(Subject):声明了真实主题和代理主题的共同接口,使得在任何可以使用真实主题的地方使用代理主题。
代理主题角色(Proxy):代理主题内部含有对真实主题的引用,可以在任何时候操作真实主题对象。
真实主题角色(Real):代理主题所代表的真实主题
代码:
abstract class Subject{
abstract public void request();
}
class RealSubject extends Subject{
public RealSubject() {
}
public void request() {
System.out.println("from real subject");
}
}
class ProxySubject extends Subject{
private RealSubject realSubject;
public ProxySubject() {
}
public void request() {
preRequest();
if(realSubject == null){
realSubject = new RealSubject();
}
realSubject.request();
afterRequest();
}
private void preRequest(){
System.out.println("previous to do ...");
}
private void afterRequest(){
System.out.println("after to do ...");
}
}