热门问题
时间线
聊天
视角

設計模式 (電腦)

對軟件設計中給定上下文中常見問題的一般可重用解決方案 来自维基百科,自由的百科全书

Remove ads

軟體工程中,設計模式design pattern)是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。這個術語是由埃里希·伽瑪(Erich Gamma)等人在1990年代從建築設計領域引入到電腦科學的。

設計模式並不直接用來完成程式碼的編寫,而是描述在各種不同情況下,要怎麼解決問題的一種方案。物件導向設計模式通常以類別物件來描述其中的關係和相互作用,但不涉及用來完成應用程式的特定類別或物件。設計模式能使不穩定依賴於相對穩定、具體依賴於相對抽象,避免會引起麻煩的緊耦合,以增強軟體設計面對並適應變化的能力。

並非所有的軟體模式都是設計模式,設計模式特指軟體「設計」層次上的問題。還有其他非設計模式的模式,如架構模式。同時,演算法不能算是一種設計模式,因為演算法主要是用來解決計算上的問題,而非設計上的問題。

隨著軟體開發社群對設計模式的興趣日益增長,已經出版了一些相關的專著,定期召開相應的研討會,而且沃德·坎寧安(Ward Cunningham)為此發明了WikiWiki用來交流設計模式的經驗。

Remove ads

發展歷史

建築師克里斯托佛·亞歷山大在1977/79年編制了一本匯集設計模式的書,但是這種設計模式的思想在建築設計領域裡的影響遠沒有後來在軟體開發領域裡傳播的廣泛。

肯特·貝克沃德·坎寧安在1987年,利用克里斯托佛·亞歷山大在建築設計領域裡的思想開發了設計模式,並把此思想應用在Smalltalk中的圖形使用者介面(GUI)的生成中。一年後,埃里希·伽瑪在他的蘇黎世大學博士畢業論文中開始嘗試把這種思想覆寫為適用於軟體開發。與此同時James Coplien 在1989年至1991年也在利用相同的思想致力於C++的開發,而後於1991年發表了他的著作Advanced C++ Programming Styles and Idioms。同年,埃里希·伽瑪得到了博士學位,然後去了美國,在那與Richard Helm、Ralph Johnson、John Vlissides 合作出版了《設計模式:可復用物件導向軟體的基礎》(Design Patterns - Elements of Reusable Object-Oriented Software) 一書,在此書中共收錄了 23 種設計模式

這四位作者在軟體開發領域裡以「四人幫」(英語,Gang of Four,簡稱GoF)而聞名,並且他們在此書中的協同運作導致了軟體設計模式的突破。有時,GoF也會用於代指《設計模式》這本書。

Remove ads

表述格式

表述一個軟體設計模式的格式根據作者的不同,劃分和名稱等都會有所不同。常用的GoF描述模式的格式大致分為以下這些部分:

  • 模式名:每一個模式都有自己的名字,模式的名字使得我們可以討論我們的設計。
  • 問題:在物件導向的系統設計過程中反覆出現的特定場合,它導致我們採用某個模式。
  • 解決方案:上述問題的解決方案,其內容給出了設計的各個組成部分,它們之間的關係、職責劃分和協同運作方式。
  • 別名:一個模式可以有超過一個以上的名稱。這些名稱應該要在這一節註明。
  • 動機:在哪種情況使用該模式,是本節提供的方案(包括問題與來龍去脈)的責任。
  • 適用性:模式適用於哪些情況、模式的背景等等。
  • 結構:這部分常用類圖與互動圖闡述此模式。
  • 參與者:這部分提供一份本模式用到的類與物件清單,與它們在設計下扮演的角色。
  • 合作:描述在此模式下,類與物件間的互動。
  • 影響:採用該模式對軟體系統其他部分的影響,比如對系統的擴充性、可移植性的影響。影響也包括負面的影響。這部分應描述使用本模式後的結果、副作用、與權衡(trade-off)。
  • 實作:這部分應描述實現該模式、該模式的部分方案、實現該模式的可能技術、或者建議實現模式的方法。
  • 範例:簡略描繪出如何以程式語言來使用模式。
  • 已知應用:業界已知的實作範例。
  • 相關模式:這部分包括其他相關模式,以及與其他類似模式的不同。
Remove ads

分類

設計模式》一書原先把設計模式分為建立型模式、結構型模式、行為型模式,把它們通過授權、聚合、診斷的概念來描述。若想更進一步了解關於物件導向設計的背景,參考介面模式內聚性。若想更進一步了解關於物件導向程式設計的背景,參考繼承介面多型

更多資訊 劃分類型, 模式名稱 ...
Remove ads

參閱

參考資料

Loading content...

外部連結

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads