深入淺出設計模式
— Head First Design Patterns 深入淺出設計模式 — Head First Design Patterns
———————————–
作者/Freeman, Sierra & Bates/著
譯者/蔡學鏞/譯
出版社/歐萊禮 出版
ISBN/9867794524

內容簡介
寫應用程式時需要依照需求預先規劃、設計,而設計模式累積了前人的經歷,經由四人幫彙整出一系列的設計模式,以利後人可以套用。本書集合四人幫的23個模式(十幾年前的事)外加這十幾年來新增的一些模式,作者群以詼諧、幽默、圖文並茂、打破傳統著書的方式,由淺入深地詳解了設計模式的精神及重點。全書全部以當紅的 Java 程式語言為範例。

前言

幾乎有經驗的軟體人員,手裡都會有一本四人幫 (GoF, Gang of Four) 著作的「設計模式 (Design Patterns)」,此本可以說是軟體業的聖經,書中介紹的 23 個設計模式,已被大量運用在系統框架 (Framework)及應用領域上。不過本書卻是相當的艱奧難懂,如同金庸小說中的「九陰真經」上卷一般,充斥的盡是心法,但若沒有從實務汲取到相當經驗的話 (極少數人是可以透過“內觀”來悟出心法,但那真的相當稀少),是很難領悟並活用這些招式的。所以坊間出版了眾多“「九陰真經」的下卷”,透過大量的實例,來闡述上卷所揭露出的心法。

這些書可以算是「設計模式」的註釋版了,不過大部分仍是以程式碼來作解釋,除了比較不容易解釋設計模式背後的哲理外,也稍嫌沈悶了一點。倒是本書,怎麼說呢?相當相當的特別!跳脫了任何種類軟體書籍的寫作方式,運用作者群在神經生物學、認知科學、學習理論等,來協助讀者將這些設計模式給深刻烙印在你的腦海中。書本封面是一位酷酷的美少女,仰著頭看著你;每一章的封面則是美國 1960 代紳士淑女們的黑白照片,簡單的意象來表達該章節想要傳達的主題;書中內容則是充斥著大量的漫畫式照片、插圖、手稿等,利用問與答的方式,來解釋一般讀者們在學習過程中,常碰到的問題與思考;同時在章節前後陸續列出了九個相當重要的 OO 守則,這些守則也可以說明軟體設計的根本,說真的,要能通透這些哲理,最少也要花上 10 年以上的功夫修煉才有可能運用得爐火純青;喔,還有填字遊戲,利用每一章所讀過的英文句子,來填出與模式相關的關鍵字彙,真的相當有趣,實在是複習的好幫手!

唯一不變的真理就是時常在改變

第一章「介紹設計模式」部分,利用了模擬鴨子游泳戲水、呱呱叫遊戲的案例,來帶出物件導向的四個基本概念:抽象、封裝、多型與繼承,也提及了重要的一件事,OO 不是只為了“做”出來,而是因為 彈性、延展性、可重用性的設計考量,賦予系統生生不息的價值。從設計實作的過程中,你會發現到,好像有些會一再重覆發生的問題,可以利用一些特定的模式來解決該問題。這些模式,可以說是 OO 設計經驗的精華所在,可以讓我們建構出具有良好 OO 設計品質的系統,更可以讓開發者之間有一個共同的字彙,來提高溝通的價值。對了,大多數的模式和守則,都是著眼於軟體改變的議題上,這也就是道出了模式的根本價值在於協助開發者如何應付改變 (Change),“Design for Change”,這可以說是軟體設計不可避免,也是唯一不變的真理了。為了要能應付改變,我覺得有兩條絕對要謹守的原則就是: 1. 將變動的部分封裝起來;2. 針對介面寫程式,不是針對實作寫程式。尤以後者,可以說是絕大部分軟體人員所無法體會的了,這是一種基於“變”的設計態度,卻非實作技術面的議題了。

他山之石,可以為錯

本書是把 23 個設計模式中的 14 個,給擺入到 1~11 章內,利用案例,作相當精闢的解說。剩下的 9 個模式,作者認為比較沒有經常地被使用,所以是放在附錄中,但仍有可取之處,所以也會利用簡單的幾頁說明用法與為何要使用的原因。我想先讓讀者瞭解一下,四人幫的設計模式,是分為三大類:生成 (Creational)、結構(Structural)、行為 (Behavioral)。生成如工廠 (Factory)模式,顧名思義,就是會幫你製造物件,再回傳給呼叫並符合該介面規格的 Client。這在多型的設計,經常會在 Server 端使用生成模式,以免讓你的 Client 與伺服端的具體類別綁住 (不要忘了,Design for Interface);結構模式,則經常反映了問題領域的概念,例如 複合 (Composite)模式,可以表達樹狀的層級,如組織 (Organization)、BOM (Bill of Material)表等;行為面的模式,一般設計者比較不容易能抽象化,因為它可能是根據設計的議題,將原本在分析階段,某一個類別的行為,抽離出來也成為類別,而能應變具再利用的價值。簡單的說,就是把行為當成物件,每一種不同行為的物件,再分門別類,並制訂出共同操作的介面 (interface)規格,與原來擔負某一行為的本體 (context)類別,關連在一起。狀態 (state)、策略 (strategy)、命令 (command)等模式,就是屬於此種行為性的模式。

最後一個章節則是指導你如何學會與設計相處,挺有意思的,它讓你瞭解設計模式的本質與其組成的主要成分;「如果你發現到處於某個情境下,面對著一群限制的問題,正影響著所欲達成的目標,然而,你能夠採用某個設計,克服這些限制並達到該目標,將你領向某個解決方案。」情境 (context)、問題、解決方案 (solution),正是組成模式的三個主要組成元素。當我們仔細觀察其定義後,進而,能組織並活用這些設計模式,更甚者能融入於心智、成為隨手拈來可得的利器,而創造出自己的模式,造福他人,成為共同溝通的語彙,那可真的是一種心靈上的愉悅,設計模式的威力與目的,正是如此。

本書很厚,600 多頁,但閱讀因為太輕鬆了,你完全感受不到厚厚的一本,還會覺得意猶未竟。眾多推薦人當中,竟然還有美式足球的明星球員推薦呢,真的難以想像,他怎麼有時間看這類的專業書籍? 但也可想而知,本書的易讀性,就是這樣地讓人可以把它帶到健身房,一邊閱讀,還能臉上堆滿笑容。