~~~~~~~大師已逝,墨跡留香~~~~~~~
學習設計模式的人,一定聽過《Design Patterns: Elements of Reusable Object-Oriented Software》這本書,俗稱GoF的《設計模式》或GoF的23個設計模式。早期就開始學習設計模式的前輩也大多讀過那本書。
GoF的設計模式只有23個嗎?其實不只23個,在該書出版之時,有接近半打的模式未能被放入該書當中,原因有很多,例如在當年尚未取得兩個以上的大型專案實例來驗證可行性、尚未取得四人的共識、與其他模式之間的分界尚不明朗等等,都可能會導致一些模式未被納入。
該書的遺珠之憾是那些模式呢?在本書中,作者(GoF的四位成員之一)補充了兩個模式,其中的GENERATION GAP模式已經獲得共識,只是在當年的實例不夠多,但現在看來,實在是稀鬆平常,到處都可以看到開發環境或框架採用了這個模式。
至於另一個TYPED MESSAGE模式,在規劃初期是叫做MULTICAST模式,這個模式初期只取得其中三人的同意。藉著這個尚未取得共識的模式,作者揭露了當初在撰寫《Design Patterns: Elements of Reusable Object-Oriented Software》時,四位作者之間對於模式的討論方式,讓讀者得以一窺大師們的討論、思想、以及對軟體設計的習慣。並且在說服反對者的最後關頭,還加入了另一位大師《Clean Code》作者Robert C. Martin(Bob大叔)的支援。如果您仔細閱讀本書第四章及第五章,會發現原來要成為一個新模式真是不簡單啊!那些面世的模式全都是大師們的心血結晶,無價的經驗寶藏。
早期,有些人會批評《Design Patterns》不適合作為學習設計模式的第一本書,或許是因為有些人看的、寫的專案不夠多,所以無法體會其中的奧妙。後來,由於設計模式被大多數高級軟體工程師接受了,因此寫了非常多的相關書籍來介紹設計模式,漸漸地,設計模式不再那麼令人敬畏,也成為了軟體設計的顯學。而這類比較容易理解的書籍,通常都是採用最適合初階讀者的寫法,也就是舉出實例來說明模式。而且舉的例子越是程式設計師理解的例子,就越能使程式設計師學會設計模式並加以活用。
有些書籍,只針對每個模式舉出一個例子,但無法找出一些好例子,可同時應用多個模式來完成同一個例子中不同的功能要求,這樣的寫作法,常常誤導了讀者,違背了設計模式的目的。換言之,一招半式是要如何走江湖呢?本書有別於那些書籍,在本書第二章中,作者以程式設計師最能理解的檔案系統為例,實際示範如何應用六個模式來解決檔案系統不同的功能需求,這六個模式之間的相互合作方式,讓人眼睛為之一亮。讚嘆道︰「原來設計模式是這樣用的啊!」
許多讀者都在期待《設計模式》的第二版,而第二版會是什麼樣子呢?這很難說(也可能不會有第二版了),但至少可以肯定的是,本書作者對於《設計模式》第二版所能做出的貢獻,都已經寫在這本書當中了。
作者簡介:
John Vlissides(1961 - 2005)是軟體設計模式的創始GoF(Gang of Four)四位成員之一,也就是設計模式名著《Design Patterns: Elements of Reusable Object-Oriented Software》的作者之一。曾在史丹佛大學工作,自1991年起任IBM T. J. Watson研究中心的研究員。他還曾是《Pattern Languages of Program Design》的編輯,以及Addison-Wesley「軟體模式」叢書的顧問。
2005年的感恩節因腦瘤病故,年僅44歲。ACM SIGPLAN為紀念他的貢獻,特別設立了John Vlissides獎。
各界推薦
名人推薦:
本書讚譽
本書將幫你理解如何將《設計模式》──其實是任何關於設計模式的書籍──當作一本珍貴的指南,而不是一些累贅的規定。
── 朗訊科技公司,貝爾實驗室 James O. Coplien
這本技術書的文風非常吸引人,我從未讀過這麼精彩的技術書。John真的已經爐火純青、游刃有餘,他對技術主題的把握如此堅實、精準又引人入勝。
── 西門子公司 Frank Buschmann
對於套用設計模式有點經驗的程式設計師來說,遇到問題該採用這個模式還是那個模式,常常陷入難以抉擇的問題,看起來這樣也可以,那樣也可以,如果您也曾有過如此的經歷,那麼您一定要好好看完這本書,相信對您會非常助益。
PS︰大學(甚或科大)不教設計模式,實在是令人難以理解?!
── 博碩文化 總編輯 陳錦輝
大師已逝,墨跡留香
── 網路留言
名人推薦:本書讚譽
本書將幫你理解如何將《設計模式》──其實是任何關於設計模式的書籍──當作一本珍貴的指南,而不是一些累贅的規定。
── 朗訊科技公司,貝爾實驗室 James O. Coplien
這本技術書的文風非常吸引人,我從未讀過這麼精彩的技術書。John真的已經爐火純青、游刃有餘,他對技術主題的把握如此堅實、精準又引人入勝。
── 西門子公司 Frank Buschmann
對於套用設計模式有點經驗的程式設計師來說,遇到問題該採用這個模式還是那個模式,常常陷入難以抉擇的問題,看起來這樣也可以,那樣也可以,如果您也曾有過如此的經...
目錄
關於中文書名
推薦序
譯者序
審校序
前言
Chapter 1 介紹
1.1 對模式的十大誤解
誤解1:「模式就是在一種場合下,對某個問題的一個解決方案。」
誤解2:「模式只是行話、規則、程式設計技巧、資料結構……」
誤解3:「看到了冰山的一角,就等於看到了整座冰山。」
誤解4:「模式需要工具或方法的支援才能生效。」
誤解5:「模式可以保證軟體的耐用、更高的生產率、世界和平,等等。」
誤解6:「模式可以『產生』整體架構。」
誤解7:「模式只用在『物件導向』設計或實作。」
誤解8:「沒有證據顯示模式對任何人有幫助。」
誤解9:「模式族群是一群由精英分子組成的小幫派。」
誤解10:「模式族群是為自己服務的,甚至是不懷好意的。」
1.2 觀察
Chapter 2 運用模式進行設計
2.1 基礎
2.2 孤兒、孤兒的收養以及替代品
2.3 「但是應該如何引入替代品呢?」
2.4 存取權限
2.5 關於VISITOR 的一些警告
2.6 單使用者檔案系統的保護
2.7 多使用者檔案系統的保護
2.8 小結
Chapter 3 主體與變體
3.1 終止SINGLETON
3.2 OBSERVER 的煩惱
3.3 重溫VISITOR
3.4 GENERATION GAP
3.4.1 時機
3.4.2 結構
3.4.3 參與者
3.4.4 合作方式
3.4.5 效果
3.4.6 實作
3.4.7 範例程式
3.4.8 已知案例
3.4.9 相關模式
3.5 Type Laundering
3.6 感謝記憶體洩漏
3.7 推拉模型
Chapter 4 愛的奉獻
1. MULTICAST 模式的動機
2. MULTICAST 模式的結構
3. MULTICAST 模式的參與者
4. MULTICAST 模式的合作方式
5. MULTICAST 模式的時機
6. MULTICAST 模式的目的
1. TYPED MESSAGE 模式的目的
2. TYPED MESSAGE 模式的動機
3. TYPED MESSAGE 模式的時機
4. TYPED MESSAGE 模式的結構
5. TYPED MESSAGE 模式的參與者
6. TYPED MESSAGE 模式的合作方式
7. TYPED MESSAGE 模式的效果
8. TYPED MESSAGE 模式的實作
9. TYPED MESSAGE 模式的範例程式
10. TYPED MESSAGE 模式的已知案例
11. TYPED MESSAGE 模式的相關模式
Chapter 5 有效率的模式編寫者的7個習慣
5.1 習慣1:經常反思
5.2 習慣2:堅持使用同一套結構
5.3 習慣3:儘早且頻繁地涉及具體問題
5.4 習慣4:保持模式間的區別和互補性
5.5 習慣5:有效地呈現
5.6 習慣6:不懈地重複
5.7 習慣7:收集並吸收迴響
5.8 沒有銀彈
參考文獻
關於中文書名
推薦序
譯者序
審校序
前言
Chapter 1 介紹
1.1 對模式的十大誤解
誤解1:「模式就是在一種場合下,對某個問題的一個解決方案。」
誤解2:「模式只是行話、規則、程式設計技巧、資料結構……」
誤解3:「看到了冰山的一角,就等於看到了整座冰山。」
誤解4:「模式需要工具或方法的支援才能生效。」
誤解5:「模式可以保證軟體的耐用、更高的生產率、世界和平,等等。」
誤解6:「模式可以『產生』整體架構。」
誤解7:「模式只用在『物件導向』設計或實作。」
誤解8:「沒有證據顯示模式對任何人有幫...