導讀:週日,又給徒弟驗收項目了。以往常的習慣同樣,每次驗收,我都陪着徒弟一塊兒總結學習過程當中的問題,而後互相交流。此次,一個徒弟驗收的是設計模式,一個徒弟驗收的是UML,本篇博客,就先寫寫設計模式的東西。編程
在漢語詞典中,模式一詞的意思是:事物的標準樣式。設計模式
在百度百科中,模式一詞的意思是:是一種認識論意義上的肯定思惟方式。是人們在生產生活實踐當通過積累的經驗的抽象和昇華。簡單地說,就是從不斷重複出現的事件中發現和抽象出的規律,是解決問題造成經驗的高度概括總結。只要是一再重複出現的事物,就可能存在某種模式。架構
設計模式(Design pattern):是一套被反覆使用、多數人知曉的、通過分類編目的、代碼設計經驗的總結。
框架
一個設計模式,是一個已被記錄的最佳實踐或一個解決方案。這個最佳實踐或解決方案已被成功應用在許多環境中,它解決了在某種特定情境中重複發生的某個問題。Christopher Alexander的建築模式:「針對在某個特定背景和做用力系統中發生的通用問題的常看法決方案」。背景:給定模式可以適用的條件;情境:做用力系統---在這個特定背景下的約束條件集合。
ide
20世紀70年代Christopher Alexander研究了爲解決同一個問題而設計出的不一樣建築結構。發現了那些高質量的設計中的類似性。用「模式語言「來指代這種類似性。–A Pattern Language: Towns, Buildings, Construction(牛津大學出版社,1977年)學習
由Alexander發現並記錄的這些模式僅僅是涉及諸如建築物、花園和道路之類的建築學方面的模式。
ui
1987年,受Alexander做品的影響Kent Beck和Ward Cunningham把建築學上的模式觀點應用於軟件設計和開發。他們利用Alexander的一些觀點開發了一系列模式,用Smalltalk語言實現了雅緻的用戶界面。利用這個工做成果,他們在1987年召開的「面向對象的編程系統、語言和應用程序(OOPSIA)研討會」上作了一個以《在面向對象編程中使用模式語言》爲題的演講。1994年,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合做的以《設計模式—可複用的面向對象軟件的基本原理》解釋了模式的用處,同時也使得設計模式獲得普遍的普及。
spa
備註:設計模式並不等同與軟件模式,而只是其中的一個分支。軟件模式還包括:架構模式,體系結構模式等。設計
模型:經過主觀意識藉助實體或者虛擬表現、構成客觀闡述形態、結構的一種表達目的的物件(物件並不等於物體,不侷限於實體與虛擬、不限於平面與立體)。在漢語詞典中,模型最基本的意思,是樣式。對象
提到模式,就很容易想到模型一詞,那麼模式與模型的區別是什麼呢?
模式:從根本上來講,是對特定問題的一個解決方案。模型,則是對於問題的一種描述。
好比說:這裏立刻要舉行一個航天模型大賽。你在腦海中造成的最終的飛機樣式或者說最終造成的實體飛機樣式,就是一種模型。而在建造模型的過程當中,遇到各類問題,你解決這些問題的方式,能夠算是一種模式。注意:模式是解決反覆出現問題的解決方案。
在學習設計模式這一本書的時候,在最後提到了一個MVC。可是,MVC確實做爲一種框架存在的,而不是模式。那麼,這是爲何,它的區別在哪裏?
框架(Framework):是整個或部分系統的可重用設計,表現爲一組抽象構件及構件實例間交互的方法;另外一種定義認爲,框架是可被應用開發者定製的應用骨架。框架能夠看作是對於解決問題的一個流程的描述。
設計模式:是在某種特定上下文中針對一個軟件生命週期中出現的問題而給出的屢次適用的解決方案。
框架:框架是一組軟件組件,它們互相協做提供了針對某個給定的問題領域中的應用程序所用到的一種可複用的體系結構。
一個框架中可能包含不少個設計模式,設計模式是比框架更小的元素。
框架能夠用代碼表示,也能直接執行或複用,而對模式而言只有實例才能用代碼表示。並且,框架通常是做爲代碼重用,而模式是做爲設計重用。
架構,又名軟件架構,是有關軟件總體結構與組件的抽象描述,用於指導大型軟件系統各個方面的設計。簡單的說架構就是一個藍圖,是一種設計方案,將客戶的不一樣需求抽象成爲抽象組件,而且可以描述這些抽象組件之間的通訊和調用。
區別:架構的抽象層級比之框架更高。框架更加傾向於技術,架構更傾向於設計,架構能夠經過不一樣的框架來實現。
例子:建築
如今這裏有一堆的建築材料,而後工程師會根據各方面的需求,將材料規整。肯定各類材料的搭配和使用的地方,最後繪製出一幅(或者不少種)圖紙。這一步,其實就是所謂的架構。而後工人們根據工程師給的這張圖紙(多是最終挑選出來的),開始利用這些材料,去搭建高樓。好比用鋼筋,先架一個高樓的架子,這個就是框架。而後對框架進行砌磚灌注混泥土等,整個高樓就建好了。但是,這時候忽然發現總體的框架是搭起來了了,可是出現了一些房間的偏小,不足。這時候,可能會在牆壁上裝上一面鏡子,利用光的原理來使房間隱形的增大,或者是一些別的方法等。在一個房間解決了問題,而後把這種方法應用到都出現了這一類問題的房間修築中,這就是模式。當高樓建好了,樓盤開售,在觀看樓盤的時候,在售樓中心,咱們會看到這些高樓的縮小版,來決定是否購買。這些縮小版的高樓,就是這個樓盤的模型。
架構(動詞)>框架>設計模式。
軟件經過架構,能夠設計出不少不一樣的框架。在一個框架中,也可使用不少的設計模式。設計模式不是哪兒哪兒均可以用的,只有當出現了某一特定的問題時,才利用設計模式去解決。設計模式不是用的越多越好,在維護的時候,過多的設計模式會極大的增添維護成本。