#設計模式
在軟件工程中,設計模式(design pattern)是對軟件設計中普遍存在(反復出現)的各種問題,所提出的解決方案。這個術語是由埃里希·伽瑪(Erich Gamma)等人在1990年代從建筑設計領域引入到計算機科學的。
設計模式并不直接用來完成代碼的編寫,而是描述在各種不同情況下,要怎么解決問題的一種方案。
**面向對象設計模式通常以類或對象來描述其中的關系和相互作用,但不涉及用來完成應用程序的特定類或對象。設計模式能使不穩定依賴于相對穩定、具體依賴于相對抽象,避免會引起麻煩的緊耦合,以增強軟件設計面對并適應變化的能力。**
并非所有的軟件模式都是設計模式,設計模式特指軟件“設計”層次上的問題。還有其它非設計模式的模式,如架構模式。同時,算法不能算是一種設計模式,因為算法主要是用來解決計算上的問題,而非設計上的問題。
肯特·貝克和沃德·坎寧安在1987年,利用克里斯托佛·亞歷山大在建筑設計領域里的思想開發了設計模式并把此思想應用在Smalltalk中的圖形用戶接口(GUI)的生成中。一年后埃里希·伽瑪在他的蘇黎世大學博士畢業論文中開始嘗試把這種思想改寫為適用于軟件開發。與此同時James Coplien 在1989年至1991年也在利用相同的思想致力于C++的開發,而后于1991年發表了他的著作Advanced C++ Programming Styles and Idioms。同年Erich Gamma 得到了博士學位,然后去了美國,在那與Richard Helm, Ralph Johnson ,John Vlissides 合作出版了《設計模式:可復用面向對象軟件的基礎》(Design Patterns - Elements of Reusable Object-Oriented Software) 一書,在此書中共收錄了23個設計模式。
這四位作者在軟件開發領域里以“四人幫”(英語,Gang of Four,簡稱GoF)而聞名,并且他們在此書中的協作導致了軟件設計模式的突破。有時,GoF也會用于代指《設計模式》這本書。
**《設計模式》一書原先把設計模式分為創建型模式、結構型模式、行為型模式,把它們通過授權、聚合、診斷的概念來描述。若想更進一步了解關于面向對象設計的背景,參考接口模式、內聚。若想更進一步了解關于面向對象編程的背景,參考繼承,接口,多態。**