• 抽象主题角色(Subject)
    声明真实主题角色与抽象主题角色的公共接口方法,可以是接口或抽象类
  • 真实主题角色(RealSubject)
    被代理类,定义代理类所表示的真实对象,执行系统真正的业务逻辑
  • 代理主题角色(Proxy)
    代理类,内部持有RealSubject的引用,具备完全对RealSubject的代理权,客户端调用代理对象的方法,同时也调用被代理对象的方法,但会在代理对象前后加一层处理逻辑

Subject.java

package proxy.general;

/**
* 抽象主题角色(Subject)
* 声明真实主题角色与抽象主题角色的公共接口方法,可以是接口或抽象类
*/
public interface ISubject {
void request();
}

RealSubject.java

package proxy.general;

/**
* 真实主题角色(RealSubject)
* 被代理类,定义代理类所表示的真实对象,执行系统真正的业务逻辑
*/
public class RealSubject implements ISubject {

public void request() {
System.out.println("real service is called.");
}

}

Proxy.java

package proxy.general;

/**
* 代理主题角色(Proxy)
* 代理类,内部持有RealSubject的引用,
* 具备完全对RealSubject的代理权,
* 客户端调用代理对象的方法,
* 同时也调用被代理对象的方法,
* 但会在代理对象前后加一层处理逻辑。
*/
public class Proxy implements ISubject {

private ISubject subject;

public Proxy(ISubject subject){
this.subject = subject;
}

@Override
public void request() {
before();
subject.request();
after();
}

public void before(){
System.out.println("called before request().");
}

public void after(){
System.out.println("called after request().");
}
}


Client.java


package proxy.general;

/**
* 客户端调用类
*/
public class Client {

public static void main(String[] args) {
new Proxy(new RealSubject()).request();
}
}

类图如下

代理之-静态代理_设计模式