標籤:代理 模式 系統 速度 java
最近參與實習公司的項目迭代,項目中需要實現系統的快速響應和大量資料處理。在不斷的學習中獲得一點兒心得,先記錄下來。慢慢的修改!
關於代理模式的知識和簡單應用之前的學習筆記中已經有記錄了,可以複習一下。這裡主要記錄如何使用代理模式來實現消極式載入,進而提升系統系能和反應速度。
使用代理模式實現消極式載入的一個簡單一實例:
需求:項目中對系統的啟動速度做了一定的要求
我們在系統首次載入時,因為不需要實際的資料來構造顯示介面,這就為我們實現系統首次載入的快速響應提供了可能。在常規模式下,我們一般會在系統啟動時就開始初始化所有的類,如果這時系統中很多類設計到獲得資料庫連接(比如初始化串連池)或者是類似的操作(比如XML解析),所有這些操作疊加在一起,就會拖慢系統的啟動速度。這時我們可以考慮使用代理模式,使用代理類,封裝一些初始化操作(比如資料庫連接池的構建),以資料庫為例:使用代理類封裝對資料庫查詢中的初始化操作,當系統啟動時,初始化這個代理類,而非真是的資料庫查詢類。而代理類什麼都沒有做,這樣構造的速度就獲得了提升。
記住這一原則:將消耗資源最多的方法都使用代理模式分離出來(如果可以的話);等到使用者真正在使用的時候在由代理類單獨去載入真實類,完成使用者的請求,因為不是所有的真實類都可能被使用者使用到。
消極式載入的核心思想:如果當前並沒有使用這個組件,則不需要真正地初始化它,使用一個代理對象代替他的原有位置,直到真正需要使用的時候才對他進行載入。
代理模式的實現:
public class RealSubject implements Subject{ public RealSubject(){ try{ Thread.sleep(1000); // 類比系統啟動時的時耗 }catch(Exception e){ e.printStackTrace(); } } public void doSomething(){ // ... }}// 代理類是輕量級的對象,建立很快public calss SubjectProxy implements Subject{ private RealSubject real = null; public void doSomething(){ // 在真正使用組件的時候,才建立真實的對象 if(real == null) real = new Sunbject(); return real.doSomething(); }}
深刻理解代理模式在java中如何最佳化系統效能