C#設計模式之代理模式(四)

Liuwei-Sunny發表於2012-11-27

15.7 代理模式效果與適用場景

       代理模式是常用的結構型設計模式之一,它為物件的間接訪問提供了一個解決方案,可以對物件的訪問進行控制。代理模式型別較多,其中遠端代理、虛擬代理、保護代理等在軟體開發中應用非常廣泛。

 

15.7.1 模式優點

       代理模式的共同優點如下:

       (1) 能夠協調呼叫者和被呼叫者,在一定程度上降低了系統的耦合度。

       (2) 客戶端可以針對抽象主題角色進行程式設計,增加和更換代理類無須修改原始碼,符合開閉原則,系統具有較好的靈活性和可擴充套件性。

       此外,不同型別的代理模式也具有獨特的優點,例如:

       (1) 遠端代理為位於兩個不同地址空間物件的訪問提供了一種實現機制,可以將一些消耗資源較多的物件和操作移至效能更好的計算機上,提高系統的整體執行效率。

       (2) 虛擬代理通過一個消耗資源較少的物件來代表一個消耗資源較多的物件,可以在一定程度上節省系統的執行開銷。

       (3) 緩衝代理為某一個操作的結果提供臨時的快取儲存空間,以便在後續使用中能夠共享這些結果,優化系統效能,縮短執行時間。

       (4) 保護代理可以控制對一個物件的訪問許可權,為不同使用者提供不同級別的使用許可權。

 

15.7.2 模式缺點

       代理模式的主要缺點如下:

       (1) 由於在客戶端和真實主題之間增加了代理物件,因此有些型別的代理模式可能會造成請求的處理速度變慢,例如保護代理。

       (2) 實現代理模式需要額外的工作,而且有些代理模式的實現過程較為複雜,例如遠端代理。

 

15.7.3 模式適用場景

       代理模式的型別較多,不同型別的代理模式有不同的優缺點,它們應用於不同的場合:

       (1) 當客戶端物件需要訪問遠端主機中的物件時可以使用遠端代理

       (2) 當需要用一個消耗資源較少的物件來代表一個消耗資源較多的物件,從而降低系統開銷、縮短執行時間時可以使用虛擬代理,例如一個物件需要很長時間才能完成載入時。

       (3) 當需要為某一個被頻繁訪問的操作結果提供一個臨時儲存空間,以供多個客戶端共享訪問這些結果時可以使用緩衝代理。通過使用緩衝代理,系統無須在客戶端每一次訪問時都重新執行操作,只需直接從臨時緩衝區獲取操作結果即可。

       (4) 當需要控制對一個物件的訪問,為不同使用者提供不同級別的訪問許可權時可以使用保護代理

       (5) 當需要為一個物件的訪問(引用)提供一些額外的操作時可以使用智慧引用代理

 

習題

       1. Windows作業系統中的應用程式快捷方式是(    )模式的應用例項。

       A. 代理 (Proxy)            B. 組合 (Composite)

       C. 裝飾 (Decorator)         D. 外觀 (Facade)

       2. 畢業生通過職業介紹所找工作,請問該過程蘊含了哪種設計模式,繪製相應的類圖。

       3. 在某應用軟體中需要記錄業務方法的呼叫日誌,在不修改現有業務類的基礎上為每一個類提供一個日誌記錄代理類,在代理類中輸出日誌,如在業務方法Method()呼叫之前輸出“方法Method()被呼叫,呼叫時間為2012-11-5 10:10:10”,呼叫之後如果沒有拋異常則輸出“方法Method()呼叫成功”,否則輸出“方法Method()呼叫失敗”。在代理類中呼叫真實業務類的業務方法,使用代理模式設計該日誌記錄模組的結構,繪製類圖並使用C#語言程式設計模擬實現。

       4. 某軟體公司欲開發一款基於C/S的網路圖片檢視器,具體功能描述如下:使用者只需在圖片檢視器中輸入網頁URL,程式將自動將該網頁所有圖片下載到本地,考慮到有些網頁圖片比較多,而且某些圖片檔案比較大,因此將先以圖示的方式顯示圖片,不同型別的圖片使用不同的圖示,並且在圖示下面標註該圖片的檔名,使用者單擊圖示後可檢視真正的圖片,介面效果如圖15-7所示。試使用虛擬代理模式設計並實現該圖片檢視器。(注:可以結合多執行緒機制,使用一個執行緒顯示小圖示,同時啟動另一個執行緒在後臺載入原圖。)

15-7 圖片檢視器介面效果圖

【友情提示:建議大家有時間的話把這些練習都做一做,有問題歡迎討論!】

【作者:劉偉(Sunny)  http://blog.csdn.net/lovelion

相關文章