proxy.png
uml.png
客戶端與接口交互
proxy與具體類都需事先接口
proxy用于額外實(shí)現(xiàn)織入的內(nèi)容
例子
接口類
public interface Subject {
void request();
void hello();
}
真正實(shí)現(xiàn)類
public class RealSubject implements Subject{
@Override
public void request() {
System.out.println("real subject execute request");
}
@Override
public void hello() {
System.out.println("hello");
}
}
代理類
public class Proxy implements Subject{
// 代理類中引用實(shí)際實(shí)現(xiàn)類
private RealSubject realSubject;
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
// 在實(shí)際對(duì)象執(zhí)行相應(yīng)邏輯的前后通過(guò)代理對(duì)象添加額外的邏輯功能
@Override
public void request() {
System.out.println("before");
try{
realSubject.request();
}catch (Exception e){
System.out.println("ex:"+e.getMessage());
throw e;
}finally {
System.out.println("after");
}
}
@Override
public void hello() {
realSubject.hello();
}
}
客戶端
public class Client {
public static void main(String[] args){
Subject subject = new Proxy(new RealSubject());
subject.request();
}
}