C#學習筆記系列之三:原廠模式

來源:互聯網
上載者:User

今天重新翻看BOB大叔的《敏捷編程》,想起了僅有的我能夠正確理解和應用的兩個設計模式之一:原廠模式。(另一個是Command模式)。於是想試試看C#的代碼如何?原廠模式,結果發現確實跟PHP有不小的區別。

通常最容易想到的用途就是建立資料庫工廠用於分別產生OleDB和SqlServer的處理類,通常的作法是建立一個工廠類,接收一個字串,如果是"Sql",就產生一個Sql資料處理類(基類是一個通用資料庫類,包含所要使用的資料庫處理函數),並且返回;如果是OLEDB,就產生一個OLEDB類並返回,接收方用基類變數收到返回的參數就可以直接使用其中的函數,而不必關心返回的是什麼類,處理的是什麼資料庫。

然而這個過程中,還是用到了switch語句,說明我們的模式應用還是有問題,還沒有達到真正的物件導向。當需要增加一個資料庫處理類的時候,不但需要添加這個類所需要的代碼,還需要修改工廠類,增加一個Case語句。在PHP中就不存在這個問題,因為PHP對變數是非常寬容的。

最終找到了一個真正解決這個問題的方法,就是通過反射機制。C#中的System.Type類包含一個重要的方法:GetType(name,true),這樣就可以得到以該名字所命名的類型的資訊。然後利用另一個重要的類System.Activator的一個重要的方法:CreateInstance(type),這樣我們就可以在不知道傳入的類名的情況下產生該類名所對應的執行個體。

對工廠類經過這樣的改造之後,程式調用端只要根據相關的設定檔傳入正確的參數就可以得到正確的執行個體,而且添加新類的時候只要添加一個資料庫處理子類,並通知使用者就可以了,無需更改其它任何東西。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.