《深入淺出設計模式 (平裝)》的書評

chchwy 發表於 2015-11-04

什麼是設計模式? 設計模式這個詞有點兒玄,因為設計模式不是一項具體技術,學會後可以寫出遊戲或者手機App等等。用我自己的話來說,設計模式是設計軟體架構的慣用手法,更精確地講,是設計物件導向程式架構的手法,目的是為了讓軟體在未來更有彈性,更容易擴充功能。

如果聽不懂上面那段話也沒關係,我學會設計模式之前,也聽不懂那些設計模式簡介在說什麼。

不過我還是分享一下我的經歷,回想我學 OOP 的過程中,有一段時間,不知怎麼好像有幾道閃電打進腦子裡,以前每念就忘的Java API呼叫,突然全都看明白了,腦子也靈光了,就差點考試都考一百分。原因很簡單,因為我念了設計模式,而 Java API 裡頭用了很多的設計模式。

要談設計模式,一定先要有設計上的難題。

假如你是一位遊戲引擎的開發人員。開發遊戲引擎呢,幾乎就像在寫一支真正的遊戲程式,該搞定的技術細節一個都不能少,只不過呢,寫的是空架子遊戲,最關鍵的地方要留白,因為這只是遊戲引擎,最終必須交給使用引擎的人來完成整個遊戲。

現在問題來囉,你並不知道這個引擎未來會被拿來寫什麼樣的遊戲,所以空架子一開始就要提供充足的彈性,即使不改寫原有引擎的任何一行源碼,也能讓人很容易的填充內容進去,同時為了適應各種類型的遊戲,引擎還要能輕鬆地擴充功能。

既不能改寫原有引擎的任何一行源碼,又有充足的彈性,輕鬆地擴充功能,這該怎麼做到阿?

舉比較實際的例子,Java Swing的開發者就遇見了這類彆扭的問題,他實作JButton按鈕元件時,他不知道按下按鈕後要執行什麼工作,他也不知道按下按鈕之後應該要通知哪個物件,因為這兩件事都應該交由使用Swing的人決定,而不是開發Swing的人,為了解決這個問題,就出現了傾聽者(Listener)的設計,背後的精神就是觀察者模式。

所以要了解設計模式之前,必須要先有設計的難題,JButton的設計就是個難題,先有難題,才知道傾聽者為什麼是個好設計。這時去學習觀察者模式才有意義。

我認為這本「深入淺出設計模式」最令人激賞的地方就在它為每個設計模式精心打造的軟體設計難題。這個難題恰如其份地顯現出模式的威力,不會過於困難以至於失焦,也不會太過簡單以至於殺雞用牛刀。

書裡會有個老闆或是客戶一樣的人跑出來問你,嘿大哥,我們原本有支程式如何如何,現在我想要擴充一個新功能進去,該怎麼辦呢?

先有了明確可以付諸實踐的場景,接著你仔細的去思量這個難題,很快就會發現問題「沒有表面想的那麼簡單呢」,不用一些手段不行。而在思索如何解決設計難題時,模式也不是一下子就蹦的出現,而是逐一探討各種方法的優劣之後,依循物件導向設計原則,慢慢的封裝、演化,最後才出現模式。

因為模式是一種設計上的抽象經驗,所以沒有足夠實戰經驗,不曾對自己寫出的爛架構而傷腦筋的人,很難體會模式的好。這本「深入淺出設計模式」很努力地想要彌補這道鴻溝,我必須稱讚它做的相當成功,而且內容有深度又有趣,個人極度推薦。

請先登入會員,才可回應。

登入 / 註冊

會員中心