關于金庸小說中到底是招式重要還是内功重要的争論從未停止,我們在這裡并不分析張無忌的九陽神功和令狐沖的獨孤九劍到底哪個更厲害,但我想每個武林人士夢寐以求的應該是既有淋漓的招式又有深厚的内功。看到這裡大家可能會産生疑問了?搞什麼,讨論什麼招式與内功,我隻是個軟體開發人員。别急,正因為你是軟體開發人員我才跟你談這個,因為我們的軟體開發技術也包括一些招式和内功:Java、C#、C++等程式設計語言,Eclipse、Visual Studio等開發工具,JSP、ASP.net等開發技術,Struts、Hibernate、JBPM等架構技術,所有這些我們都可以認為是招式;而資料結構、算法、設計模式、重構、軟體工程等則為内功。招式可以很快學會,但是内功的修煉需要更長的時間。我想每一位軟體開發人員也都希望成為一名兼具淋漓招式和深厚内功的“上乘”軟體工程師,而對設計模式的學習與領悟将會讓你“内功”大增,再結合你日益純熟的“招式”,你的軟體開發“功力”一定會達到一個新的境界。既然這樣,還等什麼,趕快行動吧。下面就讓我們正式踏上神奇而又美妙的設計模式之旅。
1 設計模式從何而來
在介紹設計模式的起源之前,我們先要了解一下模式的誕生與發展。與很多軟體工程技術一樣,模式起源于建築領域,畢竟與隻有幾十年曆史的軟體工程相比,已經擁有幾千年沉澱的建築工程有太多值得學習和借鑒的地方。
那麼模式是如何誕生的?讓我們先來認識一個人——Christopher Alexander(克裡斯托弗.亞曆山大),哈佛大學建築學博士、美國加州大學伯克利分校建築學教授、加州大學伯克利分校環境結構研究所所長、美國藝術和科學院院士……頭銜真多,

,不過他還有一個“昵稱”——模式之父(The father of patterns)。Christopher Alexander博士及其研究團隊用了約20年的時間,對住宅和周邊環境進行了大量的調查研究和資料收集工作,發現人們對舒适住宅和城市環境存在一些共同的認同規律,Christopher Alexander在著作A Pattern Language: Towns, Buildings, Construction中把這些認同規律歸納為253個模式,對每一個模式(Pattern)都從Context(前提條件)、Theme或Problem(目标問題)、 Solution(解決方案)三個方面進行了描述,并給出了從使用者需求分析到建築環境結構設計直至經典執行個體的過程模型。
在Christopher Alexander的另一部經典著作《建築的永恒之道》中,他給出了關于模式的定義:
每個模式都描述了一個在我們的環境中不斷出現的問題,然後描述了該問題的解決方案的核心,通過這種方式,我們可以無數次地重用那些已有的成功的解決方案,無須再重複相同的工作。這個定義可以簡單地用一句話表示:
模式是在特定環境下人們解決某類重複出現問題的一套成功或有效的解決方案。【A pattern is a successful or efficient solution to a recurring problem within a context】 |
1990年,軟體工程界開始關注ChristopherAlexander等在這一住宅、公共建築與城市規劃領域的重大突破。最早将模式的思想引入軟體工程方法學的是1991-1992年以“四人組(Gang of Four,簡稱GoF,分别是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)”自稱的四位著名軟體工程學者,他們在1994年歸納發表了23種在軟體開發中使用頻率較高的設計模式,旨在用模式來統一溝通面向對象方法在分析、設計和實作間的鴻溝。
GoF将模式的概念引入軟體工程領域,這标志着軟體模式的誕生。軟體模式(Software Patterns)是将模式的一般概念應用于軟體開發領域,即軟體開發的總體指導思路或參照樣闆。軟體模式并非僅限于設計模式,還包括架構模式、分析模式和過程模式等,實際上,在軟體開發生命周期的每一個階段都存在着一些被認同的模式。
軟體模式是在軟體開發中某些可重制問題的一些有效解決方法,軟體模式的基礎結構主要由四部分構成,包括問題描述【待解決的問題是什麼】、前提條件【在何種環境或限制條件下使用】、解法【如何解決】和效果【有哪些優缺點】,如圖1-1所示:
圖1-1 軟體模式基本結構
軟體模式與具體的應用領域無關,也就是說無論你從事的是移動應用開發、桌面應用開發、Web應用開發還是嵌入式軟體的開發,都可以使用軟體模式。
在軟體模式中,設計模式是研究最為深入的分支,設計模式用于在特定的條件下為一些重複出現的軟體設計問題提供合理的、有效的解決方案,它融合了衆多專家的設計經驗,已經在成千上萬的軟體中得以應用。 1995年, GoF将收集和整理好的23種設計模式彙編成Design Patterns: Elements of Reusable Object-Oriented Software【《設計模式:可複用面向對象軟體的基礎》】一書,該書的出版也标志着設計模式正式成為面向對象(Object Oriented)軟體工程的一個重要研究分支。
從1995年至今,無論是在大型API或架構(如JDK、.net Framework等)、輕量級架構(如Struts、Spring、 Hibernate、JUnit等)、還是應用軟體的開發中,設計模式都得到了廣泛的應用。如果你正在從事面向對象開發或正準備從事面向對象開發,無論你是使用Java、C#、Objective-C、VB.net、Smalltalk等純面向對象程式設計語言,還是使用C++、PHP、Delphi、JavaScript等可支援面向對象程式設計的語言,如果你一點設計模式也不懂,我可以毫不誇張的說:你真的out了。
【作者:劉偉 http://blog.csdn.net/lovelion】