代理 1 背景介紹

weixin_34290000發表於2017-04-23

概念

為某個物件提供一個代理,以控制對這個物件的訪問。 代理類和委託類有共同的父類或父介面,這樣在任何使用委託類物件的地方都可以用代理物件替代。

***代理類負責請求的預處理、過濾、將請求分派給委託類處理、以及委託類執行完請求後的後續處理。 ***
為了保持行為的一致性,代理類和委託類通常會實現相同的介面,所以在訪問者看來兩者沒有絲毫的區別。通過代理類這中間一層,能有效控制對委託類物件的直接訪問,也可以很好地隱藏和保護委託類物件,同時也為實施不同控制策略預留了空間,從而在設計上獲得了更大的靈活性。

4871751-bd4d3bd0654423f4.jpg

從圖中可以看出,代理介面(Subject)、代理類(ProxySubject)、委託類(RealSubject)形成一個“品”字結構。

事例

比如 場景是完成資料庫的查詢,並且記錄查詢前後花的時間
那麼,從設計上
代理介面 subject是一個interface 提供查詢資料庫的操作,並不實現
委託類 realSubject 實現資料庫的連線,查詢,斷開
代理類,在呼叫委託類之前,記錄查詢開始時候,呼叫之後,記錄查詢結束時間,列印出花費的時間

4871751-968e91e8c710377c.png
image.png

分類

按照代理的建立時期,代理類可以分為兩種:
靜態:由程式設計師建立代理類或特定工具自動生成原始碼再對其編譯。在程式執行前代理類的.class檔案就已經存在了。
動態:在程式執行時運用反射機制動態建立而成。

下一節會講靜態代理

refer:
http://layznet.iteye.com/blog/1182924
http://blog.csdn.net/hejingyuan6/article/details/36203505
http://www.cnblogs.com/fingerboy/p/5335328.html

相關文章