好久沒來壇子了,很想念大家,由於英國的課程很緊,沒時間寫東西,又是在公共機房,IE沒裝中文語言包,沒有權限下載:(,就沒法看國內站點,這次是放假回來幾天,看到了開心的mail,終於又找到組織了。正好這學期學了點設計模式,這次給大家寫點設計模式的東西吧。
首先,什麼是設計模式呢?簡單的說,設計模式是一種針對某一領域的特定的問題給出解決方案的模式。盡管大多數的項目是不同的,但是他們還是會面對許多有普遍性的問題。引用Christopher Alexander的一句話“每個設計模式都描述了一個在開發中屢次出現的問題,並描述了針對這個問題的核心的解決方案,這樣你就可以無數次的使用這個方案,而不用每次重復的勞動”。但是請注意這個解決方案只是一個高度概念化的解決方案,它與特定的語言,平台或工具無關,它也不涉及到實現的細節。
設計模式大致可分為三個大的類別,即Creational Patterns,Structural patterns,Behavioral patterns。
Creational Patterns,顧名思義,是處理對象創建的過程的,描述了對象是怎樣被創建的,誰在創建對象上有控制權,何時對象被創建以及用現有的對象創建其他的對象的對象之間的關系。這種類型的模式給系統帶來極大的靈活性和可擴展性,這是由於在實際的對象和客戶端使用的對象之間總是有一個間接的層。通過封裝對象的創建過程,我們可以避免重復編寫對象之間的關系和封裝的代碼。這個類別中兩個最常見的模式是Factory pattern和Singleton pattern。
a)在Factory pattern中總是有一個factory對象負責產生其他對象的實例。客戶端從factory中請求一個特定類型的對象,factory決定什麼對象被實例化。這種模式的優點是客戶端可以不去考慮事實上是什麼對象被創建(這通常是基於interface的),客戶端可以不去考慮復雜的對象細節。這就可以使我們在改動例示的對象的同時無需改動客戶端的代碼。這樣如果需求有變化時,你所需要做的只是改變factory去產生一個不同的對象。COM是在很大程度上依賴這種模式的IClassFactory用來例示COM對象.
用圖來表示就是:
InterfaceI
| | |
ObjA ObjB ObjC
| | |
Factory-------ClientObjcect