招式与内功谈起——设计模式概述(一)
? ? ? 關(guān)于金庸小說(shuō)中到底是招式重要還是內(nèi)功重要的爭(zhēng)論從未停止,我們?cè)谶@里并不分析張無(wú)忌的九陽(yáng)神功和令狐沖的獨(dú)孤九劍到底哪個(gè)更厲害,但我想每個(gè)武林人士夢(mèng)寐以求的應(yīng)該是既有淋漓的招式又有深厚的內(nèi)功。看到這里大家可能會(huì)產(chǎn)生疑問(wèn)了?搞什么,討論什么招式與內(nèi)功,我只是個(gè)軟件開(kāi)發(fā)人員。別急,正因?yàn)槟闶擒浖_(kāi)發(fā)人員我才跟你談這個(gè),因?yàn)槲覀兊能浖_(kāi)發(fā)技術(shù)也包括一些招式和內(nèi)功:Java、C#、C++等編程語(yǔ)言,Eclipse、Visual Studio等開(kāi)發(fā)工具,JSP、ASP.NET等開(kāi)發(fā)技術(shù),Struts、hibernate、JBPM等框架技術(shù),所有這些我們都可以認(rèn)為是招式;而數(shù)據(jù)結(jié)構(gòu)、算法、設(shè)計(jì)模式、重構(gòu)、軟件工程等則為內(nèi)功。招式可以很快學(xué)會(huì),但是內(nèi)功的修煉需要更長(zhǎng)的時(shí)間。我想每一位軟件開(kāi)發(fā)人員也都希望成為一名兼具淋漓招式和深厚內(nèi)功的“上乘”軟件工程師,而對(duì)設(shè)計(jì)模式的學(xué)習(xí)與領(lǐng)悟?qū)?huì)讓你“內(nèi)功”大增,再結(jié)合你日益純熟的“招式”,你的軟件開(kāi)發(fā)“功力”一定會(huì)達(dá)到一個(gè)新的境界。既然這樣,還等什么,趕快行動(dòng)吧。下面就讓我們正式踏上神奇而又美妙的設(shè)計(jì)模式之旅。
?
1 設(shè)計(jì)模式從何而來(lái)
????? 在介紹設(shè)計(jì)模式的起源之前,我們先要了解一下模式的誕生與發(fā)展。與很多軟件工程技術(shù)一樣,模式起源于建筑領(lǐng)域,畢竟與只有幾十年歷史的軟件工程相比,已經(jīng)擁有幾千年沉淀的建筑工程有太多值得學(xué)習(xí)和借鑒的地方。
????? 那么模式是如何誕生的?讓我們先來(lái)認(rèn)識(shí)一個(gè)人——Christopher Alexander(克里斯托弗.亞歷山大),哈佛大學(xué)建筑學(xué)博士、美國(guó)加州大學(xué)伯克利分校建筑學(xué)教授、加州大學(xué)伯克利分校環(huán)境結(jié)構(gòu)研究所所長(zhǎng)、美國(guó)藝術(shù)和科學(xué)院院士……頭銜真多,,不過(guò)他還有一個(gè)“昵稱”——模式之父(The father of patterns)。Christopher Alexander博士及其研究團(tuán)隊(duì)用了約20年的時(shí)間,對(duì)住宅和周邊環(huán)境進(jìn)行了大量的調(diào)查研究和資料收集工作,發(fā)現(xiàn)人們對(duì)舒適住宅和城市環(huán)境存在一些共同的認(rèn)同規(guī)律,Christopher Alexander在著作A Pattern Language: Towns, Buildings, Construction中把這些認(rèn)同規(guī)律歸納為253個(gè)模式,對(duì)每一個(gè)模式(Pattern)都從Context(前提條件)、Theme或Problem(目標(biāo)問(wèn)題)、?Solution(解決方案)三個(gè)方面進(jìn)行了描述,并給出了從用戶需求分析到建筑環(huán)境結(jié)構(gòu)設(shè)計(jì)直至經(jīng)典實(shí)例的過(guò)程模型。
????? 在Christopher Alexander的另一部經(jīng)典著作《建筑的永恒之道》中,他給出了關(guān)于模式的定義:
??????每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷出現(xiàn)的問(wèn)題,然后描述了該問(wèn)題的解決方案的核心,通過(guò)這種方式,我們可以無(wú)數(shù)次地重用那些已有的成功的解決方案,無(wú)須再重復(fù)相同的工作。這個(gè)定義可以簡(jiǎn)單地用一句話表示:
| 模式是在特定環(huán)境下人們解決某類重復(fù)出現(xiàn)問(wèn)題的一套成功或有效的解決方案。【A pattern is a successful or efficient solution to a recurring? problem within a context】 |
? ? ? ?1990年,軟件工程界開(kāi)始關(guān)注ChristopherAlexander等在這一住宅、公共建筑與城市規(guī)劃領(lǐng)域的重大突破。最早將模式的思想引入軟件工程方法學(xué)的是1991-1992年以“四人組(Gang of Four,簡(jiǎn)稱GoF,分別是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)”自稱的四位著名軟件工程學(xué)者,他們?cè)?994年歸納發(fā)表了23種在軟件開(kāi)發(fā)中使用頻率較高的設(shè)計(jì)模式,旨在用模式來(lái)統(tǒng)一溝通面向?qū)ο蠓椒ㄔ诜治觥⒃O(shè)計(jì)和實(shí)現(xiàn)間的鴻溝。
????? GoF將模式的概念引入軟件工程領(lǐng)域,這標(biāo)志著軟件模式的誕生。軟件模式(Software Patterns)是將模式的一般概念應(yīng)用于軟件開(kāi)發(fā)領(lǐng)域,即軟件開(kāi)發(fā)的總體指導(dǎo)思路或參照樣板。軟件模式并非僅限于設(shè)計(jì)模式,還包括架構(gòu)模式、分析模式和過(guò)程模式等,實(shí)際上,在軟件開(kāi)發(fā)生命周期的每一個(gè)階段都存在著一些被認(rèn)同的模式。
????? 軟件模式是在軟件開(kāi)發(fā)中某些可重現(xiàn)問(wèn)題的一些有效解決方法,軟件模式的基礎(chǔ)結(jié)構(gòu)主要由四部分構(gòu)成,包括問(wèn)題描述【待解決的問(wèn)題是什么】、前提條件【在何種環(huán)境或約束條件下使用】、解法【如何解決】和效果【有哪些優(yōu)缺點(diǎn)】,如圖1-1所示:
圖1-1?軟件模式基本結(jié)構(gòu)
??? 軟件模式與具體的應(yīng)用領(lǐng)域無(wú)關(guān),也就是說(shuō)無(wú)論你從事的是移動(dòng)應(yīng)用開(kāi)發(fā)、桌面應(yīng)用開(kāi)發(fā)、Web應(yīng)用開(kāi)發(fā)還是嵌入式軟件的開(kāi)發(fā),都可以使用軟件模式。
??? 在軟件模式中,設(shè)計(jì)模式是研究最為深入的分支,設(shè)計(jì)模式用于在特定的條件下為一些重復(fù)出現(xiàn)的軟件設(shè)計(jì)問(wèn)題提供合理的、有效的解決方案,它融合了眾多專家的設(shè)計(jì)經(jīng)驗(yàn),已經(jīng)在成千上萬(wàn)的軟件中得以應(yīng)用。?1995年,?GoF將收集和整理好的23種設(shè)計(jì)模式匯編成Design Patterns: Elements of Reusable Object-Oriented Software【《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》】一書(shū),該書(shū)的出版也標(biāo)志著設(shè)計(jì)模式正式成為面向?qū)ο?Object Oriented)軟件工程的一個(gè)重要研究分支。
??? 從1995年至今,無(wú)論是在大型API或框架(如JDK、.net Framework等)、輕量級(jí)框架(如Struts、spring、?Hibernate、JUnit等)、還是應(yīng)用軟件的開(kāi)發(fā)中,設(shè)計(jì)模式都得到了廣泛的應(yīng)用。如果你正在從事面向?qū)ο箝_(kāi)發(fā)或正準(zhǔn)備從事面向?qū)ο箝_(kāi)發(fā),無(wú)論你是使用Java、C#、Objective-C、VB.net、Smalltalk等純面向?qū)ο缶幊陶Z(yǔ)言,還是使用C++、PHP、Delphi、JavaScript等可支持面向?qū)ο缶幊痰恼Z(yǔ)言,如果你一點(diǎn)設(shè)計(jì)模式也不懂,我可以毫不夸張的說(shuō):你真的out了。
【作者:劉偉?http://blog.csdn.net/lovelion】
總結(jié)
以上是生活随笔為你收集整理的招式与内功谈起——设计模式概述(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 「卷无人道」,手机app定制
- 下一篇: 泛型中的 T、E、K、V,还记得嘛?