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