C#專案中常用到的設計模式

發表於2016-06-06

1. 引言

一個專案的通常都是從Demo開始,不斷為專案新增新的功能以及重構,也許剛開始的時候程式碼顯得非常凌亂,毫無設計可言。但是隨著專案的迭代,往往需要將很多相同功能的程式碼抽取出來,這也是設計模式的開始。熟練運用設計模式應該是每一個軟體開發人員的必備技能。今天給大家介紹幾個常用的設計模式。

2. 單例模式

單例模式恐怕是很多開發人員最先接觸到的模式之一,可以認為就是一個全域性變數。它的初始化過程無非就是一開始就new 一個instance,或者惰性初始化等需要用到的時候new 一個instance。這裡需要注意的是在多執行緒情況下new一個instance。通常加上lock 可以解決問題。這裡我們利用C# 的系統函式 Interlocked.CompareExchange

3. 迭代器模式

迭代器模式也是用的比較多的一種,通常見於C#的內建容器資料結構 List,Stack等等,為了便於遍歷容器內元素。這裡給出一個簡單版的Stack實現

Stack 的 迭代器內部實現:

4 工廠模式

工廠模式細分的話有簡單工廠模式、抽象工廠模式等。它最核心的就是如何通過 Factory new 一個 物件出來。在ASP.NET MVC 訊息處理實現過程中工廠模式運用的非常多。比如

在MVC中處理一個Request,其實就是呼叫Controller下的一個Action,這就需要從Url 和Route 中反射出Controller物件,內部由ControllerFactory建立。

image

它的預設實現是:DefaultControllerFactory

image

另一個例子是ValueProviderFactory,它使得Controller 下的Action 能夠接收到前端傳回來的資料並實現模型繫結,是典型的抽象工廠實現。

image

5. 訂閱模式

訂閱模式在某些專案運用比較多,比如 Knockout 整個專案就是一個大的訂閱模式的實現,但是它是用javascript編寫的。還有像微博、微信公眾號等等訂閱模式通常少不了。

通常可以定義介面:

實現:

6.  責任鏈模式

責任鏈模式沒有像工廠模式那樣被人熟悉,在ASP.NET WebApi 中有一個非常典型的實現 就是WebApi的訊息處理管道HttpMessageHandler

image

這裡給一個簡單的模擬

7. 組合模式

組合模式是使得單個物件和組合物件有一致的行為,一致的行為可以理解為擁有同一個介面,比如圖形顯示

8. 總結

市場上有很多關於設計模式的書,但是基本的設計模式大概有20多種,本文給大家介紹了幾種專案中常見的設計模式,其實有些設計模式在實際專案已經不知不覺用起來了。

以後再給大家介紹其他的幾種設計模式。

相關文章