設(shè)計模式
發(fā)展歷史
建筑師克里斯托佛·亞歷山大在1977/79年編制了一本匯集 設(shè)計模式 的書,但是這種設(shè)計模式的思想在建筑設(shè)計領(lǐng)域里的影響遠(yuǎn)沒有后來在軟件開發(fā)領(lǐng)域里傳播的廣泛。
肯特·貝克和沃德·坎寧安在1987年,利用克里斯托佛·亞歷山大在建筑設(shè)計領(lǐng)域里的思想開發(fā)了 設(shè)計模式 并把此思想應(yīng)用在Smalltalk中的圖形用戶接口(GUI)的生成中。一年后埃里?!べが斣谒奶K黎世大學(xué)博士畢業(yè)論文中開始嘗試把這種思想改寫為適用于軟件開發(fā)。與此同時James Coplien 在1989年至1991年也在利用相同的思想致力于C++的開發(fā),而后于1991年發(fā)表了他的著作 Advanced C++ Programming Styles and Idioms 。同年Erich Gamma 得到了博士學(xué)位,然后去了美國,在那與Richard Helm, Ralph Johnson ,John Vlissides 合作出版了《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》( Design Patterns - Elements of Reusable Object-Oriented Software ) 一書,在此書中共收錄了23個 設(shè)計模式 。
這四位作者在軟件開發(fā)領(lǐng)域里以“”(英語,Gang of Four,簡稱GoF)而聞名,并且他們在此書中的協(xié)作導(dǎo)致了軟件設(shè)計模式的突破。有時,GoF也會用于代指《設(shè)計模式》這本書。
表述格式
表述一個軟件設(shè)計模式的格式根據(jù)作者的不同,劃分和名稱等都會有所不同。常用的GoF描述模式的格式大致分為以下這些部分:
模式名:每一個模式都有自己的名字,模式的名字使得我們可以討論我們的設(shè)計。
問題:在面向?qū)ο蟮南到y(tǒng)設(shè)計過程中反復(fù)出現(xiàn)的特定場合,它導(dǎo)致我們采用某個模式。
解決方案:上述問題的解決方案,其內(nèi)容給出了設(shè)計的各個組成部分,它們之間的關(guān)系、職責(zé)劃分和協(xié)作方式。
別名:一個模式可以有超過一個以上的名稱。這些名稱應(yīng)該要在這一節(jié)注明。
動機:在哪種情況使用該模式,是本節(jié)提供的方案(包括問題與來龍去脈)的責(zé)任。
適用性:模式適用于哪些情況、模式的背景等等。
結(jié)構(gòu):這部分常用類圖與交互圖闡述此模式。
參與者:這部分提供一份本模式用到的類與對象清單,與它們在設(shè)計下扮演的角色。
合作:描述在此模式下,類與對象間的交互。
影響:采用該模式對軟件系統(tǒng)其他部分的影響,比如對系統(tǒng)的擴(kuò)充性、可移植性的影響。影響也包括負(fù)面的影響。這部分應(yīng)描述使用本模式后的結(jié)果、副作用、與權(quán)衡(trade-off)
實現(xiàn):這部分應(yīng)描述實現(xiàn)該模式、該模式的部分方案、實現(xiàn)該模式的可能技術(shù)、或者建議實現(xiàn)模式的方法。
示例:簡略描繪出如何以編程語言來使用模式。
已知應(yīng)用:業(yè)界已知的實現(xiàn)示例。
相關(guān)模式:這部分包括其他相關(guān)模式,以及與其他類似模式的不同。
分類
《設(shè)計模式》一書原先把設(shè)計模式分為創(chuàng)建型模式、結(jié)構(gòu)型模式、行為型模式,把它們通過授權(quán)、聚合、診斷的概念來描述。若想更進(jìn)一步了解關(guān)于面向?qū)ο笤O(shè)計的背景,參考接口模式、內(nèi)聚。若想更進(jìn)一步了解關(guān)于面向?qū)ο缶幊痰谋尘埃瑓⒖祭^承,接口,多態(tài)。
參閱
設(shè)計范例
反模式,對某個問題經(jīng)常出現(xiàn)的、在設(shè)計中應(yīng)該盡量避免的、壞的設(shè)計方案。
模式挖掘
軟件重構(gòu)
程序設(shè)計實踐
參考資料
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides: Design Patterns , Addison-Wesley, 1995, hardcover, 395 pages, ISBN 978-0-201-63361-0, Design Patterns CD , 1997 ISBN 978-0-201-63498-3
Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal: Pattern-oriented Software Architecture, Volume 1: A System of Patterns , John Wiley & Sons Ltd., ISBN 978-0-471-95869-7
Douglas Schmidt: Pattern-oriented Software Architecture. Volume 2: Patterns for Concurrent and Networked Objects , John Wiley & Sons Ltd., ISBN 978-0-471-60695-6
Alan Shalloway, James R. Trott: Design Patterns Explained: A New Perspective on Object-Oriented Design , Addison-Wesley, ISBN 978-0-201-71594-1
Martin Fowler: Patterns of Enterprise Application Architecture , Addison-Wesley, ISBN 978-0-321-12742-6
設(shè)計模式列表.
mgrand的書介紹了許多模式
hillside.net模式目錄
設(shè)計模式會通
設(shè)計模式工具箱
C#面向?qū)ο笤O(shè)計模式縱橫談系列課程
免責(zé)聲明:以上內(nèi)容版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。感謝每一位辛勤著寫的作者,感謝每一位的分享。
相關(guān)資料
展開- 有價值
- 一般般
- 沒價值
{{item.userName}} 舉報
{{item.time}} {{item.replyListShow ? '收起' : '展開'}}評論 {{curReplyId == item.id ? '取消回復(fù)' : '回復(fù)'}}
{{_reply.userName}} 舉報
{{_reply.time}}