軟件測試開發技術.NET設計模式:工廠方法模式(Factory Method)[6] .NET開發
關鍵字:設計模式 <httpHandlers>
<add verb="*" path="*.sample"
type="HttpHandlerFactoryImpl,SampleHandler" />
</httpHandlers>
最后一步我們需要把文件擴展*.sample映射到ASP.NET ISAPI擴展DLL(aspnet_isapi.dll)上。由于我們已經建立了用于處理新擴展文件的處理程序了,我們還需要把這個擴展名告訴IIS并把它映射到ASP.NET。如果你不執行這個步驟而試圖訪問*.sample文件,IIS將簡單地返回該文件而不是把它傳遞給ASP.NET運行時。其結果是該HTTP處理程序不會被調用。
運行Internet服務管理器,右鍵點擊默認Web站點,選擇屬性,移動到主目錄選項頁,并點擊配置按鈕。應用程序配置對話框彈出來了。點擊添加按鈕并在可執行字段輸入aspnet_isapi.dll文件路徑,在擴展字段輸入.sample。其它字段不用處理;該對話框如下所示:
在.NET Framework中,關于工廠模式的使用有很多的例子,例如IEnumerable和IEnumerator就是一個Creator和一個Product;System.Security.Cryptography中關于加密算法的選擇,SymmetricAlgorithm, AsymmetricAlgorithm, 和HashAlgorithm分別是三個工廠,他們各有一個靜態的工廠方法Create;System.Net.WebRequest是 .NET Framework 的用于訪問 Internet 數據的請求/響應模型的抽象基類。使用該請求/響應模型的應用程序可以用協議不可知的方式從 Internet 請求數據。在這種方式下,應用程序處理 WebRequest 類的實例,而協議特定的子類則執行請求的具體細節。請求從應用程序發送到某個特定的 URI,如服務器上的 Web 頁。URI 從一個為應用程序注冊的 WebRequest 子代列表中確定要創建的適當子類。注冊 WebRequest 子代通常是為了處理某個特定的協議(如 HTTP 或 FTP),但是也可以注冊它以處理對特定服務器或服務器上的路徑的請求。有時間我會就.NET Framework中工廠模式的使用作一個專題總結。
實現要點
1. Factory Method模式的兩種情況:一是Creator類是一個抽象類且它不提供它所聲明的工廠方法的實現;二是Creator是一個具體的類且它提供一個工廠方法的缺省實現。
2. 工廠方法是可以帶參數的。
3. 工廠的作用并不僅僅只是創建一個對象,它還可以做對象的初始化,參數的設置等。
效果
1. 用工廠方法在一個類的內部創建對象通常比直接創建對象更靈活。
2. Factory Method模式通過面向對象的手法,將所要創建的具體對象的創建工作延遲到了子類,從而提供了一種擴展的策略,較好的解決了這種緊耦合的關系。
適用性
在以下情況下,適用于工廠方法模式:
1.當一個類不知道它所必須創建的對象的類的時候。
2.當一個類希望由它的子類來指定它所創建的對象的時候。
3.當類將創建對象的職責委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候。
總結
Factory Method模式是設計模式中應用最為廣泛的模式,通過本文,相信讀者已經對它有了一定的認識。然而我們要明確的是:在面向對象的編程中,對象的創建工作非常簡單,對象的創建時機卻很重要。Factory Method要解決的就是對象的創建時機問題,它提供了一種擴展的策略,很好地符合了開放封閉原則。
原文轉自:http://www.anti-gravitydesign.com