熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java程序性能優化-代理模式(1)

2013-11-23 20:01:41  來源: Java高級技術 

    代理模式(

  代理模式也是一種很常見的設計模式它使用代理對象完成用戶請求屏蔽用戶對真實對象的訪問就如同現實中的代理一樣代理人被授權執行當事人的一些事宜而無需當事人出面從第三方的角度看似乎當事人並不存在因為他只和代理人通信而事實上代理人是要有當事人的授權並且在核心問題上還需要請示當事人

  在現實中使用代理的情況很普遍而且原因也很多比如當事人因為某些隱私不方便出面或者當事人不具備某些相關的專業技能而需要一個職業人員來完成一些專業的操作也可能由於當事人沒有時間處理事務而聘用代理人出面

  在軟件設計中使用代理模式的意圖也很多比如因為安全原因需要屏蔽客戶端直接訪問真實對象或者在遠程調用中需要使用代理類處理遠程方法調用的技術細節(如RMI)也可能是為了提升系統性能對真實對象進行封裝從而達到延遲加載的目的在本小節中主要討論使用代理模式實現延遲加載從而提升系統的性能和反應速度

  代理模式的結構

  代理模式的主要參與者有如表所示

  表  代理模式角色

  以一個簡單的示例來闡述使用代理模式實現延遲加載的方法及其意義假設某客戶端軟件有根據用戶請求去數據庫查詢數據的功能在查詢數據前需要獲得數據庫連接軟件開啟時初始化系統的所有類此時嘗試獲得數據庫連接當系統有大量的類似操作存在時(比如xml解析等)所有這些初始化操作的疊加會使得系統的啟動速度變得非常緩慢為此使用代理模式使用代理類封裝對數據庫查詢中的初始化操作當系統啟動時初始化這個代理類而非真實的數據庫查詢類而代理類什麼都沒有做因此它的構造是相當迅速的

  在系統啟動時將消耗資源最多的方法都使用代理模式分離就可以加快系統的啟動速度減少用戶的等待時間而在用戶真正做查詢操作時再由代理類單獨去加載真實的數據庫查詢類完成用戶的請求這個過程就是使用代理模式實現了延遲加載

  注意代理模式可以用於多種場合如用於遠程調用的網絡代理考慮安全因素的安全代理等延遲加載只是代理模式的一種應用場景

  延遲加載的核心思想是如果當前並沒有使用這個組件則不需要真正地初始化它使用一個代理對象替代它的原有的位置只要在真正需要使用的時候才對它進行加載使用代理模式的延遲加載是非常有意義的首先它可以在時間軸上分散系統壓力尤其在系統啟動時不必完成所有的初始化工作從而加速啟動時間其次對很多真實主題而言在軟件啟動直到被關閉的整個過程中可能根本不會被調用初始化這些數據無疑是一種資源浪費顯示了使用代理類封裝數據庫查詢類後系統的啟動過程

  圖  代理類的工作流程

  若系統不使用代理模式則在啟動時就要初始化DBQuery對象而使用代理模式後啟動時只需要初始化一個輕量級的對象DBQueryProxy

  系統的結構圖如圖所示IDBQuery是主題接口定義代理類和真實類需要對外提供的服務在本例中了定義了實現數據庫查詢的公共方法request()函數DBQuery是真實主題負責實際的業務操作DBQueryProxy是DBQuery的代理類

       返回目錄Java程序性能優化讓你的Java程序更快更穩定

  編輯推薦

       Java程序設計培訓視頻教程

       JEE高級框架實戰培訓視頻教程

       JME移動開發實戰教學視頻

  Visual C++音頻/視頻技術開發與實戰

  Oracle索引技術

  ORACLEG數據庫開發優化指南


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27834.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.