#論道:[gof](總結的設計模式,23種,種種不同,種種強大。
但是這種偏於抽象的思維精華,理解起來並不簡單。其實設計模式不過是術,是勢,真正的道則是物件導向思想。
所以我們很有必要先了解一下物件導向思想,掌握了道,則世界從此不同。
#物件導向
我淺顯的總結了一下物件導向思想,把幾個重點列出來:
###1、類與類之間的關係:關聯、組合、聚合、依賴、泛華(繼承、實現)
###2、物件導向程式設計特點:可擴充套件、可復用、可維護、靈活性。
###3、物件導向設計原則
- 單一職能原則
- 開放-封閉原則(物件導向設計的核心所在)
- 依賴倒置原則(物件導向設計的標識,如果我們程式設計的時候是物件導向編碼,而不是實現程式設計,就是物件導向的設計)---使用黎克特制替換原則來實現依賴倒置
- 迪公尺特法則(松耦合、資訊的隱藏促進了軟體的復用)
- 合成/聚合復用原則
#ootv杯超級模式大賽
我採用了[大話設計模式](中關於模式的總結,個人覺得很通俗易懂、語氣可愛,有助於總覽設計模式。
###1、ootv簡介
ootv的發起人是物件導向先生。
監製、策劃有:抽象先生、封裝先生、繼承女士、多型女士。
評委:請來的是大名鼎鼎的開放封閉先生、oo公司cto單一職能先生、頂級coder依賴倒置先生和他的妻子黎克特制替換女士,還有世界最大程式設計公司的聯合創始人合成聚合復用女士和迪公尺特先生,熱烈歡迎。
評判標準:可擴充套件性,可復用性、可維護性、靈活性。
舉行比賽的原因:隨之軟體不斷複雜化,物件導向思想開始被廣泛應用。但是有了核心思想之後,我們需要更多的程式設計技巧來應對複雜局面,隨著物件導向程式設計方式的發展,出現了設計模式、orm、以及各種工具和框架。軟體為何要複雜化呢?其實不是軟體的問題,而是需求的問題。物件導向技術的最新進展是設計模式,所以我們非常有必要舉行一場這樣的比賽。
###2、工廠家族參賽
我們只要真正深入地理解了設計原則,很多設計模式其實就是原則的應用而已,或許在不知不覺中就在使用設計模式了。
簡單工廠、工廠方法、抽象工廠是三姐妹,她們一起參加了比賽。最小的簡單工廠被開放封閉先生pass了。
接下來的比賽,只剩下二姐和三姐了。
###3、創造型模式組比賽
第一組是創造型的選手:
2號、建造者小姐,她的口號是:將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
3號、工廠方法小姐向我們走來,她聲稱:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠模式使乙個類的例項化延遲到其子類。
4號、原型小姐,她長得可真漂亮,不過她的模式也值得關注:用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。
5號、單例小姐,身材高挑,引人注目,她提倡簡潔就是美:保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。
建立型選手的實力都很強,評委們解釋了為何把它們放在一起:建立型模式隱藏了這些類的例項是如何被建立和放在一起,整個系統關於這些物件所知道的是由抽象類所定義的介面。這樣,建立型模式在建立了什麼,誰建立它,它是怎麼被建立的,以及何時建立這些方面提供了很大的靈活性。
###4、內聚和耦合
在第一組選手比賽的時候,物件導向顯示提供了一些高屋建瓴的見解。各位評委們都深表認同。下面看一下這些精彩理論:
內聚性藐視的是乙個例程內部組成部分之間相互聯絡的緊密程度。
而耦合性描述的是乙個例程與其他例程之間聯絡的緊密程度。
軟體開發的目標應該是建立這樣的例程:內部完整,也就是高內聚,而與其他例程之間的聯絡則是小巧、直接、可見、靈活的,這就是松耦合。
###5、結構型模式比賽
第二組選手閃亮登場:
6號、介面卡小姐,根據可靠訊息,介面卡可是有殺手鐗的,她的口號是:將乙個類的介面轉換為客戶希望的另外乙個介面。介面卡模式使得原來由於介面不相容而不能一起工作的那些類可以一起工作。
7號、橋接。橋接小姐據傳身世不錯,她提倡的是:將抽象部分與它的實現部分分離,使他們都可以獨立的變化。
8號、組合小姐。她是家族中最漂亮的姑娘,她的口號是:將物件組合成樹形結構以表示「部分—整體」的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性。
9號、裝飾小姐,來自知名化妝品公司的乙個普通員工,她的意圖是:動態給乙個物件新增一些額外的職責。就增加功能來說,裝飾模式相比生成子類更加靈活。
10號、外觀小姐,台下竟然有人喊:「有一美人兮,見之不忘。一日不見兮,思之如狂。」外觀小姐顯得很羞澀,但她還是說出了自己宣言:為子系統中的一組介面提供乙個一致的介面,外觀模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。
11號、享元小姐,看起來很幹練的女子。她說:為運用共享技術有效地支援大量細粒度的物件。
12號、**小姐,她的父親和物件導向先生有很大交情,不過物件導向先生並不避諱這一點,他說他非常欣賞**小姑娘,希望大家也多關注她,但他表示不會干擾評委們的評判。**小姐聲稱:為其他物件提供一種**以控制對這個物件的訪問。
被稱為「死亡小組」的結構型模式組引起了人們的熱議,評委們把它們放在一起,是因為:他們都描述了如何將類和物件結合在一起形成更大的結構的問題。
毫無疑問,結構型模式小組實力很強,具體結果讓我們敬請期待。
###6、行為型模式一組比賽
第三組成為行為型模式:
13號、觀察者模式,她的口號是:定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生變化時,所有依賴於它的物件都得到通知並被自動更新。
14號、模板方法模式,她提倡:定義乙個操作的演算法骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
15號、命令小姐,她覺得:將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化;可以對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
16號、狀態小姐,她說:執行乙個物件在其內部狀態改變時改變它的行為,讓物件看起來似乎修改了它的類。
17號、職責鏈小姐,她一直認為:使多個物件都有機會處理請求,從而避免請求的傳送者和接受者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。
行為組的分組規則:對在不同的物件之間劃分責任和演算法的抽象化。行為模式不僅僅是關於類和物件的,而且是關於它們之間的相互作用的。
###7、行為型模式二組比賽
行為型模式二組:
18號、直譯器小姐,她聲稱:給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。
19號、中介者小姐,她說她是:用乙個中介物件來封裝一系列的物件互動。中介者使各物件不需要顯式地相互引用,從而使得耦合鬆散,而且可以獨立地改變它們之間的互動。
20號、訪問者小姐,她表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。
21號、策略,乙個可愛的功能,她的意圖是:定義一系列的演算法,把它們乙個個封裝起來,並且使它們可喜歡替換。本模式使得演算法可獨立於使用它的客戶而變化。
22號、備忘錄小姐,她說:在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。
23號、迭代器小姐,她說:提供一種方法順序訪問乙個聚合物件中各個元素,而不需要暴露物件的內部表示。
###8、宣布結果
物件導向先生出現了,他總結到:
物件導向設計模式體現的就是抽象的思想,類是什麼,類是對物件的抽象,抽象類呢,其實就是對類的抽象,那介面呢,說白了就是對行為的抽象。
設計模式大賽決賽入圍的有:工廠方法、外觀、觀察者、策略、介面卡。
最後,物件導向開啟了評委的信封,念道,「第一屆ootv杯超級設計模式大賽的冠軍是…..」
每個人心中都有自己的冠軍。
###設計模式先了解到這裡,不過這些模式要熟練使用,還需要多加鍛鍊,也需要時間的磨練,經驗的積累。
設計模式總結
http www.chenjiliang.com article view.aspx?articleid 6708 比較 設計模式 常用程度 適用層次 引入時機 結構複雜度 abstract factory 比較常用 應用級設計時 比較複雜 builder 一般 級 編碼時一般 factory me...
設計模式總結
模式相關的描述 裝飾者 包裝乙個物件,以提供新的行為 狀態 封閉了基於狀態的行為,並使用委託在行為之間切換 迭代器 在物件的集合之間遊走,而不暴露集合的實現 外觀 簡化一群類的介面 策略 封閉可以互換的行為,並使用委託來決定要使用哪乙個 包裝物件,以控制對此物件的訪問 工廠方法 由子類來決定要建立的...
設計模式總結
這類模式的特質是管理物件的建立過程。通常設計總是以使用工廠方法開始,當設計者發現需要更大的靈活性時,設計會向其它建立型模式演化。工廠方法模式 單例模式 抽象工廠方法模式 建造者模式 原型模式 簡單工廠模式 這類模式從程式的結構上解決模組之間的耦合問題。介面卡模式 裝飾模式 橋接模式 組合模式 享元模...