有經驗的軟體人員,手上幾乎都會有一本四人幫(Gang of Four,GoF)所寫的《設計模式》(Design Patterns),這本書可以說是軟體業的聖經,書中介紹的23個設計模式,已被大量運用在系統框架(Framework)及應用領域上。不過,本書卻相當艱奧難懂,如同「九陰真經」上卷一般,談論的盡是心法,若沒有相當的實務經驗,很難領悟並活用這些招式。

目前坊間已出版眾多「九陰真經」的下卷,透過大量實例,闡述上卷所揭露的心法,這些書算是「設計模式」的註釋版,大部分仍是以程式碼解釋,不容易解釋設計模式背後的哲理之外,也稍嫌沈悶。

不過,這次要介紹的《深入淺出設計模式》相當特別,它跳脫一般軟體書籍的寫作方式,運用作者群在神經生物學、認知科學、學習理論等領域的專長,協助讀者將設計模式深刻烙印在腦海中。

書中充斥著大量漫畫式照片、插圖、手稿等,利用問與答的方式,解釋讀者在學習過程中,常碰到的問題與思考。同時,章節前後會陸續列出9個相當重要的「物件導向守則」,這些守則也可以說明軟體設計的根本。

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

第一章「介紹設計模式」,利用模擬鴨子游泳戲水、呱呱叫遊戲的案例,帶出物件導向的4個基本概念:抽象、封裝、多型與繼承,並提出一項重要原則,物件導向不是只為了「做」出來,而是因為彈性、延展性、可重用性的設計考量,賦予系統生生不息的價值。

從設計實作的過程中,你會發現,有些一再重複發生的問題,可以利用特定的模式解決。這些模式,可說是物件導向設計經驗的精華所在,讓我們建構出有良好物件導向設計品質的系統,更可以讓開發者之間有一個共同的字彙,提高溝通價值。

大多數的模式和守則,都是著眼於軟體改變的議題,這也道出模式的根本價值在於協助開發者如何應付改變(Change),「Design for Change」可說是軟體設計不可避免,也是唯一不變的真理。為了能應付改變,有兩條絕對要謹守的原則,一、封裝變動的部分;二、針對介面寫程式,而不是針對實作寫程式。絕大部分軟體人員無法體會後者,因為這是一種基於「變」的設計態度,而非實作技術面的議題。

他山之石,可以攻錯

本書把23個設計模式中的14個,放入第一~十一章,利用案例,解說得相當精闢。作者認為剩下的9個模式,使用頻率不高,所以放在附錄中。

先讓讀者了解一下,四人幫的設計模式,分為三大類:生成(Creational)、結構(Structural)、行為(Behavioral)。

生成,如同工廠(Factory)模式,幫你製造物件,再回傳給呼叫並符合該介面規格的用戶端。多型的設計經常會在伺服器端使用生成模式,避免綁住你的用戶端與伺服器端的具體類別(不要忘了,Design for Interface)。

結構模式則經常反映出問題領域的概念,例如:複合(Composite)模式,可以表達樹狀的層級,如組織、BOM (Bill of Material)表等。

行為面的模式,一般的設計者比較不容易抽象化,因為它可能是根據設計的議題,將原本在分析階段,某一個類別的行為,抽離出來,也成為類別,而能應變,成為具再利用的價值。簡單地說,就是把行為當成物件,每一種不同行為的物件,再分門別類,並制訂出共同操作的介面(interface)規格,與原來擔負某一行為的本體 (context)類別,關連在一起。狀態(state)、策略(strategy)、命令(command)等模式,就是屬於此種行為性的模式。

本書最後一個章節,則是指導你如何學會與設計相處,它讓你了解設計模式的本質與主要成分。

情境(context)、問題、解決方案(solution),正是組成模式的3個主要元素。當我們仔細觀察定義後,進而能組織並活用這些設計模式,更甚者,能融入於心智、成為隨手拈來可得的利器,進而創造出自己的模式,造福他人,成為共同溝通的語彙,那可真是一種心靈上的愉悅,設計模式的威力與目的,正是如此。

 

深入淺出設計模式(Head First Design Patterns)

Eric Freeman、Elisabeth Freeman、

Kathy Sierra、Bert Bates/著

蔡學鏞/譯

歐萊禮出版

售價:880元

《作者簡介》

王克明

台北工專五專部電子科畢業。現於HSDc軟體設計顧問團隊擔任架構師/顧問/講師。興趣為整體架構性的思考與學習、期貨投機操作與閱讀。

相關閱讀:
軟體設計必讀經典(1)以簡約之道介紹UML最實用的部分
軟體設計必讀經典(2)物件導向分析與設計入門
軟體設計必讀經典(3)洞悉易學難精的Use Case
軟體設計必讀經典(4)知易行難的極致軟體製程
軟體設計必讀經典(6)RUP活用,也可以是敏捷開發
軟體設計必讀經典(7)重構讓程式回到應有位置
軟體設計必讀經典(8)由生活出發,輕鬆領會物件導向
軟體設計必讀經典(9)優質使用者介面,源自好的狀態圖設計
軟體設計必讀經典(10)幫助SA紮穩UML底子的實務手冊
軟體設計必讀經典(11)反覆測試與修正,讓錯誤消失

熱門新聞

Advertisement