標籤:
指客戶通過代理類來調用其他對象的方法,並且在程式運行時根據需要動態建立目標類的代理對象。
動態代理使用場合:調試,遠程方法調用
代理設計模式原理:
使用一個代理將對象封裝起來,然後用該代理對象取代原始對象,任何對原始對象的調用都要通過代理,代理對象決定是否以及何時將方法調用轉到原始對象上。
interface Subject{
void action();
}
//被代理類
class RealSubject implements Subject{
public void action(){
}
}
//代理類
class MyInvoctionHandler implements InvoicationHandler{
//當通過代理類的對象發起對被重寫的方法的調用時,都會轉化為對如下的invoke方法的調用
public Object invoidke(Object proxy,Method method,Object[] args)throws Throwable{
//method方法的傳回值
Object retrunVal=method.invoke(obj,args);
return returnVal;
}
Object obj;//嗜血介面的被代理類的對象的聲明
//給被代理類的對象執行個體化,返回一個代理類的對象
public Object blind(Object obj) {
this.obj=obj;
return Proxy.newProxyInstance(obj.getClass.getclassLoader,obj.getClass.getInterfaces,this);
}
return null;
}}
Object obj=代理類.blind(被代理類)
Subject sub=(Subject)obj;//此時sub就是代理類對象
sub.action();//轉到對Invacation介面實作類別的invoke方法的調用
java動態代理