現如今,設計模式已經較前兩年失去了一些關注度和熱度。人們已經把目光投向那些革命性的高科技產品和技術,諸如:iPhone,iPad,雲端運算,雲平台,HTML5等等。但是我認為,不管時間如何變化,軟體設計思想永遠隨著時間推移而被人們繼承和發揚光大。
生活中的很多經驗,都是曆經風雨滄桑,被人們所接受認知併流傳至今。比如:“磨刀不誤砍柴工”,“織網捕魚”,“是騾子是馬,拉出去遛遛”等。不管咋樣,本質思想是不變的。設計模式也是這樣,本質就是那些成功軟體設計師們的寶貴經驗,是經過大量實踐,總結歸納來的。既然生活經驗可以積累繼承,那設計模式也可以在程式設計和開發方面供我們使用。
那什麼是設計模式?我們不需要那些抽象概念,只要記住是一種解決問題的思路,是複雜問題的簡單解決方案就可以了。這隻是宏觀上對他進行說明。具體說就是:設計模式是對於在某種環境下軟體設計問題上的可重用的解決方案,目的就是要充分利用已有的軟體開發經驗,解決不同問題。在軟體開發設計的時候我們也是不斷思考,實踐,歸納總結得到一種行之有效方法,遇到具體問題,拿過來套用把問題解決掉。
模式不是發明與創造,而是來自我們日常設計開發中的發現與總結,是一種實踐經驗的積累,最終促使我們走向成熟。
設計模式種類很多,包括分布式編程模式,使用者介面模式,資料模型模式三大類。目前比較流行的是物件導向設計模式GoF(Gang of Four的縮寫)模式,翻譯出來比較邪惡“四人幫”,另一個是GRASP(General Responsibility Assignment Software Pattern)稱為通用職責分配軟體模式。
GRASP與其說他是模式,不如說他是原則和設計要求。他是幹啥的?引用一段文檔上的話很貼切,“GRASP的核心是自己幹自己的事,自己只幹自己的事,也就是職責分配和實現高內聚。用來解決物件導向設計的一些問題”。
在OOD中GRASP包括九大設計原則:
- 低耦合(Low Coupling)
- 高內聚(High Cohesion)
- 資訊專家(Information Expert)
- 建立者(Creator)
- 控制器(Controller)
- 多態(Polymorphism)
- 純虛構(Pure Fabrication)
- 間接(Indirection)
- 受保護變化(Protected Variation)
GoF模式,眾所周知包括23種設計模式。
-
- 建立型(Creational)
- 結構型(Structural)
- 行為型(Behavioral)
-
- 類模式
- 對象模式
GRASP原則著重考慮設計類的原則及如何分配類的功能,而GoF模式則著重考慮設計的實現、類與類的互動及軟體品質。所以GoF模式是符合GRASP原則的物件導向設計模式。