l

2012年1月13日 星期五

盤點 Design Patterns

January 13 10:44~11:40


前一陣子有朋友問 Teddy 能否去教他們公司的工程師 design patterns。想起 Design Patterns 這本書  Teddy 已經有一陣子沒有去看它了,最近一次仔細重看書中的 Memento 是為了研究 exception handling 裡面關於 state restoration(狀態回復)的問題,那是多久以前的事現在回想起來居然沒有任何印象...Orz。只依稀記得當年在看 Memento 的時候其實搞不太懂這個 pattern 可以用來幹麼,所以好像從來也沒用過它。一直到 10 幾年後突然發現 Memento 可以應用在例外處理設計,算是替 Memento 找到一份工作了...XD。


Design Patterns 這本書是 Teddy 在 1997年10月24日在天瓏書局買得,算一算已經是14 年前了事了。當初會買這本書,好像是在 BBS 討論區看到某位前輩提到這本書,後來去天瓏翻了一下覺的寫得真棒就買回家。一看之下真的不得了,讀完之後(其實沒有整本全部讀完啦)覺的自己的軟體設計功力大增。書中所講得設計觀念,現在看起來可能覺的是「常識」,可是有好多 patterns 可是 Teddy 自己慢慢在專案中一一自己實做過之後,才體會到這些 patterns 的意義(剛開始自己學習的時候也是一頭霧水)。


***


10 幾年前 Teddy 也有做了一些投影片,在自己還是一知半解的情況下,跟公司的同仁分享 Design Patterns(好東西要跟好朋友分享啊)。當年 Teddy 還是個年輕小伙子,被問到自己也不懂的地方,就說一聲「不會」也就沒事了。但是現在「年事已高」,如果還被問到不會的地方就有點尷尬了(年紀大有年紀大耍無賴的方式...XD)。所以才想說把書拿出來「盤點」一下,看看那些 patterns 是自己很熟的,那些是很少實做而且已經忘得差不多的。
  • Creational patterns:幾乎稍微大一點的案子都會用到裡面的五種 patterns,尤其是 Singleton,Factory Method 和 Builder。
  • Structural patterns:除了 Decorator、Flyweight 以外,其他的 patterns 用到的機會都滿多的。
  • Behavioral patterns:Command、Observer、State、Strategy、Template Method、Visitor 用到的機會最多,Iterator、Mediator 次之,Chain of Responsibility、Interpreter、Memento 比較少用到(後面這三個有用過嗎?)。

對於一個剛接觸 design patterns 的新人,Teddy 會建議學習順序為:

  1. Singleton、Factory Method、Adapter、Composite、Command、Observer
  2. Builder、Abstract Factory、Facade、Proxy、State、Template Method。
  3. Bridge、Strategy、Visitor、Mediator、Iterator、Prototype。
  4. Decorator、Flyweight、Chain of Responsibility、Interpreter、Memento

上述建議純粹為 Teddy 個人的偏見,鄉民隨便看看就好,不用太在意。


寫到這邊突然有一個問題:真的有鄉民把這 降龍18掌 23 個 patterns 一口氣全部都派上用場嗎?有的話請介紹給 Teddy 認識一下,要跟他學習。


***

友藏內心獨白:手邊的這本書都已經長黃斑了。

5 則留言:

  1. 叫人教Design Patterns應該是十年前的事了吧,現在都是常識了。書我比較早買,1995年就買了。

    回覆刪除
  2. To 匿名:

    理論上是這樣,但是還是有很多 programmers 不是很了解或是根本沒聽過 design patterns 耶。

    1995 年應該是書出版的那一年,這位大哥很跟的上時代。

    回覆刪除
  3. 很難全用上吧!我之前WiMAX和DVB-H的案子,用上三、四個就很複雜了。

    回覆刪除
  4. To Spirit Du:

    那你有全部 23 個都用過一遍嗎(在不同的專案裡面)?

    回覆刪除
  5. 沒有耶 像Memento、Flyweight、Interpreter這幾個一直沒用到

    回覆刪除