Design Patterns: Solidify Your C# Application Arch
來源:互聯網
上載者:User
Design Patterns: Solidify Your C# Application Architecture with Design Patterns中文版(中篇) optimizer(翻譯)
關鍵字 設計模式 singleton strategy decorator composite state
出處 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag01/html/PATTERNS.asp
Design Patterns: Solidify Your C# Application Architecture with Design Patterns中文版(中篇)
作者:Samir Bajaj
譯者:榮耀
【譯序:C#進階文章。譯者對Samir提供的C#例子進行了簡單整理(作者提供的某些代碼在譯者的環境中無法通過編譯),並編寫了對應的C++樣本,一併置於譯註中,以便讀者比對。譯文中所有C#、C++程式調試環境均為Microsoft Visual Studio.NET 7.0 Beta2】
decorator
客戶應用常常需要加強某些類的方法所提供的服務。可能需要分別在方法調用前後插入一些預先處理和後繼處理的代碼。要實現這個目標,一種辦法是乾脆做成不同的方法調用。然而,這種方式不但麻煩,而且不利於架構的擴充。例如,如果對於不同的客戶來說明顯要執行不同的預先處理和後繼處理任務,應用程式邏輯將會因為條件陳述式而變得晦澀不清並難以維護。問題是如何才能增強類所提供的功能的同時又不影響客戶代碼,而Decorator模式正是所需。
讓我們來考察一個具有遠程檔案傳輸功能的類的例子。這樣的類代碼可能如表5所示。
表5
class FileTransfer
{
public virtual void Download(string url, byte[] data, int size)
{
// 下載檔案
}
public virtual void Upload(string url, byte[] data, int size)
{
// 上傳檔案
}
}
假定有一個客戶程式對這個功能感興趣。除了能夠上傳和下載檔案外,客戶應用還希望能夠將所有的檔案傳輸請求和執行訪問檢查寫入日誌。基於decorator模式的一種實現方式是從FileTransfer類派生出一個類並重載虛方法,並於調用基類方法之前或之後,插入附加代碼。如表6所示。