首頁  >  文章  >  Java  >  java 靜態代理 動態代理深入學習

java 靜態代理 動態代理深入學習

黄舟
黄舟原創
2016-12-12 13:24:501710瀏覽

一、代理模式
代理模式是常用的java設計模式,特徵是代理類與委託類有同樣的接口,代理類主要負責為委託類預處理消息、過濾消息、把消息轉發給委託類,以及事後處理訊息等。
代理類別與委託類別之間通常會存在關聯關係,一個代理類別的物件與一個委託類別的物件關聯,代理類別的物件本身並不真正實現服務,而是透過呼叫委託類別的物件的相關方法,來提供特定的服務。
依照代理的創建時期,代理類別可以分為兩種:
靜態代理程式:由程式設計師建立或特定工具自動產生原始程式碼再對其編譯。在程式運行前代理類別的.class檔案就已經存在了。
動態代理:在程式運作時運用反射機制動態創建而成。

二、單一靜態代理 

码如下:
public interface CountDao 
{ 
// 查看账户方法 
public void queryCount(); 
} 
public class CountDaoImpl implements CountDao 
{ 
public void queryCount() 
{ 
System.out.println("查看账户方法..."); 
} 
} 
public class CountTrancProxy implements CountDao 
{ 
private CountDao countDao; 
public CountProxy(CountDao countDao) 
{ 
this.countDao = countDao; 
} 
@Override 
public void queryCount() 
{ 
System.out.println("tranc start"); 
countDao.queryCount(); 
System.out.println("tranc end"); 
} 
} 
public class TestCount 
{ 
public static void main(String[] args) 
{ 
CountTrancProxy countProxy = new CountTrancProxy(new CountDaoImpl()); 
countProxy.updateCount(); 
} 
}

tranc start
查看帳戶方法...
tranc end
三、多個靜態代理
在上面處理之前

查看帳戶方法...

事務處理後
Log end
四、總結
其實可以用代理類可以用繼承或實現接口兩種方式達到代理的效果,但是當多個代理類需要相互組合的時候,繼承就不靈活了,需要不斷重寫代理類,而實作介面的方式就十分容易通過的聚合實現代理類別之間的組合。 



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn