設計模式簡介

軟件工程中,設計模式(design pattern)是對軟件設計中普遍存在(反復出現(xiàn))的各種問題,所提出的解決方案。這個術語是由埃里?!べが?/a>(Erich Gamma)等人在1990年代從建筑設計領域引入到計算機科學的。

設計模式并不直接用來完成代碼的編寫,而是描述在各種不同情況下,要怎么解決問題的一種方案。面向?qū)ο?/a>設計模式通常以類別對象來描述其中的關系和相互作用,但不涉及用來完成應用程序的特定類別或?qū)ο?。設計模式能使不穩(wěn)定依賴于相對穩(wěn)定、具體依賴于相對抽象,避免會引起麻煩的緊耦合,以增強軟件設計面對并適應變化的能力。

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

歷史發(fā)展:
肯特·貝克沃德·坎寧安在1987年,利用克里斯托佛·亞歷山大在建筑設計領域里的思想開發(fā)了設計模式并把此思想應用在Smalltalk中的圖形用戶接口(GUI)的生成中。一年后埃里希·伽瑪在他的蘇黎世大學博士畢業(yè)論文中開始嘗試把這種思想改寫為適用于軟件開發(fā)。與此同時James Coplien 在1989年至1991年也在利用相同的思想致力于C++的開發(fā),而后于1991年發(fā)表了他的著作Advanced C++ Programming Styles and Idioms。同年Erich Gamma 得到了博士學位,然后去了美國,在那與Richard Helm, Ralph Johnson ,John Vlissides 合作出版了《設計模式:可復用面向?qū)ο筌浖幕A》(Design Patterns - Elements of Reusable Object-Oriented Software) 一書,在此書中共收錄了 23 種設計模式。

這四位作者在軟件開發(fā)領域里以“四人幫”(英語,Gang of Four,簡稱GoF)而聞名,并且他們在此書中的協(xié)作導致了軟件設計模式的突破。有時,GoF也會用于代指《設計模式》這本書。

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

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

設計模式》一書原先把設計模式分為創(chuàng)建型模式、結構型模式、行為型模式,把它們通過授權、聚合、診斷的概念來描述。

軟件設計七大原則

開閉原則

對擴展開放,對修改關閉

依賴倒置原則

通過抽象使各個類或者模塊不相互影響,實現(xiàn)松耦合

單一職責原則

一個類、接口、方法只做一件事

接口隔離原則

盡量保證接口的純潔性,客戶端不應該依賴不需要的接口

迪米特原則

又叫最少知道原則,一個類對其所依賴的類知道得越少越好

里氏替換原則

子類可以擴展父類的功能但不能改變父類原有的功能

合成復用原則

盡量使用對象組合、聚合,而不使用繼承關系達到代碼復用的目的

創(chuàng)建型模式

工廠方法模式(Factory Pattern)、抽象工廠模式(Abstract Factory Pattern)、單例模式(Singleton Pattern)、建造者模式(Builder Pattern)、原型模式(Prototype Pattern)

結構型模式

適配器模式(Adapter Pattern)、裝飾器模式(Decorator Pattern)、代理模式(Proxy Pattern)、外觀模式(Facade Pattern)、橋接模式(Bridge Pattern)、組合模式(Composite Pattern)、享元模式(Flyweight Pattern)

行為型模式

策略模式(Strategt Pattern)、模板方法模式(Template Pattern)、觀察者模式(Observer Pattern)、迭代子模式(Iterative Pattern)、責任鏈模式(Chain of Responsibility Pattern)、命令模式(Command Pattern)、備忘錄模式(Memo Pattern)、狀態(tài)模式(State Pattern)、訪問者模式(Visitor Pattern)、中介者模式(Mediator Pattern)、解釋器模式(Interpreter Pattern)

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 創(chuàng)建型模式 工廠模式 工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種類型的設...
    liuyang7519閱讀 391評論 0 2
  • 設計模式(Design pattern)代表了最佳的實踐,通常被有經(jīng)驗的面向?qū)ο蟮能浖_發(fā)人員所采用。設計模式是軟...
    Chars閱讀 709評論 2 5
  • 初見設計模式是在學習安卓的過程中發(fā)現(xiàn)了,在我用到許多名中含有factory和buil相關的類的時候產(chǎn)生了一些疑問,...
    賣梳子的鯉魚閱讀 512評論 0 1
  • 設計模式主要分三個類型:創(chuàng)建型、結構型和行為型。 其中創(chuàng)建型有: 一、Singleton,單例模式:保證一個類只有...
    iOS開發(fā)攻城獅閱讀 1,843評論 0 4
  • Git安裝教程Git安裝教程http://note.youdao.com/noteshare?id=3d112e4...
    CarlosLynn閱讀 247評論 0 0

友情鏈接更多精彩內(nèi)容