C#设计模式之代理模式(四)
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 圖片查看器界面效果圖
總結
以上是生活随笔為你收集整理的C#设计模式之代理模式(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: omnet++:官方文档翻译总结(三)
- 下一篇: Eclipse + pydev插件