內容簡介
即使是經驗豐富的軟體專業人士,也會發現要為其企業找到能帶來實質價值的模式套用方式殊非易事。《元素模式》首次以全面的方法論介紹元素模式,給出標準的命名和描述,闡述它們的重要性,幫助人們比較和選用,充分利用模式的真正力量,將它們轉化成實際的、更加簡潔直接的軟體實現,並得到非常不錯的效果。
對於開發工程師、設計師、架構師和分析師,《元素模式》都能提供有價值的指導,幫助他們在大多數語言、環境和問題領域使用模式。
編輯推薦
本書介紹一類全新的設計模式——元素模式(Elemental Design Pattern)。元素模式植根於軟體程式設計理論,目的卻在於實踐性和實用性。程式設計新手與資深開發工程師都是元素模式的目標客群。它能帶領學生加入軟體工業大軍,也能為研究者打開新思路。
√ 作者的非凡洞見被凝結為16種元素模式,其與四人幫設計模式的本質區別在於——元素模式建立在對象、欄位、方法、類型這四個維度的設計空間上,讓模式變得智慧型而鮮活,可以由所處位置直觀感知其含義,不同模式間的關係同樣可由位置表征。
√ 本書用代碼、圖形(PIN箱)和代數(ρ演算)三種方式來描述設計模式,每一種都可以高效地轉換為實際工作代碼。
√ 軟工的本質即為結合抽象方法論與具體開發實踐,因而本書提出的設計模式新術語、新方法,必將成為軟體開發和軟體工程的主流。
√ 掌握書中一整套全新工具,你將對程式設計基本概念有更深入的理解,並知道它們是以怎樣的方式聯繫和互動才產生了偉大的創意。
內容提要
即使是經驗豐富的軟體專業人士,也會發現要為其企業找到能帶來實質價值的模式套用方式殊非易事。《元素模式》首次以全面的方法論介紹元素模式,給出標準的命名和描述,闡述它們的重要性,幫助人們比較和選用,充分利用模式的真正力量,將它們轉化成實際的、更加簡潔直接的軟體實現,並得到非常不錯的效果。
對於開發工程師、設計師、架構師和分析師,《元素模式》都能提供有價值的指導,幫助他們在大多數語言、環境和問題領域使用模式。
目錄
第1章 設計模式介紹 1
1.1 部落神話和部落智慧 5
1.2 藝術還是科學 9
1.2.1 生搬硬套地對待模式 9
1.2.2 模式和實現語言的相關性討論 10
1.2.3 從神話到科學 12
第2章 元素模式 13
2.1 背景 14
2.2 定位、動機和方法 17
2.2.1 解析裝飾器 18
2.2.2 縱身兔穴 21
2.2.3 語境 31
2.2.4 設計空間 34
2.3 核心EDP 44
2.4 結論 45
第3章 模式實例記法 47
3.1 基本原理 47
3.2 PIN 箱 51
3.2.1 簡易PIN 箱 52
3.2.2 標準PIN 箱 54
3.2.3 擴展PIN 箱 58
3.2.4 堆疊PIN 箱與多重性 61
3.2.5 剝離和合併 65
3.3 結論 69
第4章 EDP的運用 71
4.1 模式的組成 71
同位素 76
4.2 改造裝飾器 81
4.3 重構 96
4.4 大局觀 108
4.5 為什麼需要閱讀附錄 114
4.6 高級主題 115
4.6.1 重點文檔與培訓 115
4.6.2 指標 116
4.6.3 程式化分析 119
4.7 結論 119
第5章 EDP編目 121
創建對象 123
檢索 132
繼承 136
抽象接口 145
委託 151
重定向 157
集聚 165
遞歸 171
歸複方法 178
擴展方法 187
委託型集聚 193
重定向型遞歸 199
信託型委託 206
信託型重定向 215
表親信託型委託 222
表親信託型重定向 229
第6章 中間模式結構 237
實現方法 239
檢索型創建 243
檢索型共享 248
對象標識符 253
對象遞歸 260
第7章 GoF設計模式構成 269
7.1 創建型模式 270
7.1.1 抽象工廠 270
7.1.2 工廠方法 274
7.2 結構型模式 278
7.2.1 裝飾器 278
7.2.2 代理 282
7.3 行為型模式 284
7.3.1 職責鏈 284
7.3.2 模板方法 286
7.4 結論 291
附錄 ρ演算 293
A.1 依賴運算符 294
A.2 傳遞律和同位素 297
A.3 相似性 298
A.4 EDP 形式化 299
A.5 組合及化簡規則 303
A.6 模式實例記法和角色 306
A.7 EDP 定義 307
A.7.1 創建對象 307
A.7.2 檢索 308
A.7.3 繼承 310
A.7.4 抽象接口 310
A.7.5 委託 311
A.7.6 重定向 312
A.7.7 集聚 312
A.7.8 遞歸 313
A.7.9 歸複方法 313
A.7.10 擴展方法 314
A.7.11 委託型集聚 315
A.7.12 重定向型遞歸 315
A.7.13 信託型委託 316
A.7.14 信託型重定向 317
A.7.15 表親信託型委託 318
A.7.16 表親信託型重定向 319
A.8 中間模式定義 320
A.8.1 實現方法 320
A.8.2 檢索型創建 321
A.8.3 檢索型共享 322
A.8.4 對象標識符 323
A.8.5 對象遞歸 324
A.9 GoF 設計模式定義 325
A9.1 抽象工廠 325
A9.2 工廠方法 326
A9.3 裝飾器 328
A9.4 代理 329
A9.5 職責鏈 330
A9.6 模板方法 331
參考文獻 333
作者簡介
作者簡介:Jason McC. Smith,2005 年畢業於北卡羅萊納州立大學教堂山分校,獲計算機科學博士學位。該校也是元素模式的誕生地,元素模式當時是模式查詢和識別系統(System for Pattern Query and Recognition,SPQR)項目的組成部分。Smith 博士因其在校的研究項目而榮獲兩項美國國家專利,一項與SPQR 所採用的技術相關,另一項則來自 FaceTop 分散式文檔協作系統。
此前,Smith 博士在物理仿真工程和諮詢界工作過多年,取得了華盛頓州立大學的物理學和數學學士學位,值得一提的項目包括聲納和海洋環境仿真、電子工程仿真、商用和軍用飛機飛行仿真,以及實時圖形訓練系統等。
在 IBM 沃森研究中心工作的四年,使 Smith 博士有機會將從 SPQR 和EDP 目錄中獲得的經驗加以組織,並套用到大量的軟體實體中,包括遺留系統和現代系統。
Smith博士現在供職於華盛頓州柯克蘭市的The Software Revolution公司,任資深研究科學家。在那裡,他持續地最佳化 EDP 目錄,並尋找各種方法來推進公司在自動控制現代化及遺留系統改造方面的業務目標。
譯者簡介:高博,1983年生,畢業於上海交通大學。目前在EMC中國卓越研發集團任首席工程師,在信息科學和工程領域有近15年實踐和研究經驗。酷愛讀書和寫作,業餘研究興趣涉獵廣泛。譯著包括圖靈獎作者高德納的《研究之美》和布魯克斯的《設計原本》,以及《信息簡史》等。近年來,出版翻譯作品近百萬字。
媒體評論
讀完本書映入我腦海的是電影《2001 太空漫遊》(2001: A Space Odyssey)中的一個精彩場景。
在已遭遺棄的飛船“發現號”上度過了幾個月,並把失控的超級電腦Hal 制服以後,David Bowman 博士來到一塊巨石前,然後被帶到了一個嶄新的世界。他留給地球的最後一句話是 :“滿目皆星辰!”
軟體密集型系統就是我們通過腦力勞動創造出來的嶄新世界。Bowman看到的世界由原子構成,所以滿目皆星辰 ;而我們的這個新世界由比特構成,所以——滿目皆模式。
無論是有意栽花還是無心插柳,所有結構良好的軟體密集型系統都用到了各種模式。識別系統中的模式,在分析系統時有助於提升抽象的水平 ;而在系統中運用模式,則有助於讓系統變得更有秩序、優雅和簡單。以我個人的經驗來看,過去的二十多年來,模式是軟體工程中最為重要的進步之一。
我有幸與 Jason 共事,從事改進 SPQR 的工作,容我向你們保證,他對模式實踐背後的思想演進做出了巨大的貢獻。本書有助於你打開有關模式的全新思路,將模式套用於自己所創造和維護的軟體中,並促進其改進。如果你對模式還比較陌生,這本書是極好的入門讀物 ;如果你已經熟悉模式,我希望你能溫故而知新。我本人就受益良多。
——Grady Booch IBM 院士
前言
本書介紹了一類全新的設計模式,稱為元素模式(Elemental DesignPattern),其為軟體工程設計模式的研究和套用打下了基礎。元素模式深深植根於軟體程式設計理論的研究,但其目的卻在於實踐性和實用性。從程式設計的新手,到資深的開發工程師,都是元素模式的目標客群。它能夠帶領學生加入軟體工業的大軍,也能夠為研究者打開新的思路。
一言以蔽之,本書的寫作目的在於為人所用。
讀畢掩卷之時,你將在工具箱中收穫一整套全新的工具,你將對日常的程式設計基本概念有更深入的理解,並知道它們是以怎樣的方式聯繫和互動才產生了偉大的創意。元素模式,簡稱EDP,是一組基礎的程式設計思想,我們本能地使用它們,而幾乎不會去反思。但本書給予了它們正式的描述和標準的名字,以便在討論時使用。本書還提供了一個框架來保證概念的一致性,並針對它們各自的特點加以比較。如果你是一個剛入學的學生,你將會了解到,如雨後春筍般湧現的設計模式文獻並非要么全盤接受、要么全盤棄用的鐵板一塊,而是可以分解為若干片段來逐個取用、採用科學的方法論來一點點地理解的鴻篇巨著。如果你早已是軟體設計和模式方面的行家裡手,也仍然可以找到研究老辦法的新視角,並發現我們這個行業里的新機會。
本書假定你對於設計模式領域曾多少有過一些了解和熟悉,但並未深度套用或研究過。僅僅知道存在這么一個領域,並對其有一些道聽途說的認知,已經足夠開展我們的討論。本書並不期望你有程式設計理論或語言設計的背景,甚至不要求你精通一門面向對象的程式設計語言,只要你心懷渴望,想要學習軟體設計的辯證思維即可。在本書中這些主題會有所涉及,但相關論述只能作為藉助參考文獻深入了解相關主題的出發點。本書將採用統一建模語言(Unified Modeling Language,UML)來描述一些小例子,如果你還不了解UML,請參考[20] 或[33]。你需要有一點點程式設計基礎,面向過程或面向對象皆可,最好是後者,但這並不是必需的——本書內容已經把面向對象程式設計必知必會的信息打包成易於理解的模組了。經驗豐富的面向對象程式開發工程師亦會有驚喜,發現自認為早已掌握的概念仍有新意,從而提升自己對於面向對象程式設計的整體認識。
許多程式設計師都把“設計模式社區”看作一個專家怪人的群體,認為自己並非其中一員。通過帶給你新的視角,讓你認識到設計模式是怎么來的,本書應該能說服你接受如下觀點,即每一位程式設計師都是設計模式社區的一員,無論其自覺與否。每一位程式設計師在寫下每一行代碼的時候,都在運用設計模式,無論其是否這樣去想。正因如此,有些選項近在眼前卻被人棄如草芥。設計模式是一種共享的概念空間,我們在其中編織自己的電子夢想,並由此改變世界。是時候給出一張標識地界的地圖了,這樣我們才能更好地工作和享受。
遵循Gang of Four(GoF)[21] 樹立的典範,本書亦分為兩部分。前半部分講述了本書為何而寫,為誰而寫,解釋了什麼是EDP,它源自何處,為何重要。該部分闡述的是基本理論,是EDP 背後的“為什麼”。該部分還介紹了模式實例記法(Pattern Instance Notation),這是一種能和各種粒度級別上的模式協同工作的圖表系統。前半部分的收尾章節討論了如何使用EDP 來構建更大尺度的設計模式,以及如何與其協同工作。後半部分則是設計模式的大閱兵,以EDP 為起點,通過案例來講述它們如何以組合方式形成過渡模式,最後從EDP 組合的視角重新審視了若干GoF 設計模式。這裡講述的EDP 只是全部EDP 目錄的一部分,只是首輪被定義和描述的基礎模式集合。軟體工程社區將不斷地定義和精化更多的EDP,只要它們背後的概念能夠生根發芽。我們期待你能參與其中。
熱烈歡迎你的加入!