April 23 21:57~22:57
Teddy最近三個月因故在某公司教人GoF的design patterns,今天中午遇到某位鄉民問Teddy說:「GoF的23個patterns應該不用每一個都學吧,像那個interpreter pattern就好像沒什麼用」。
不知道鄉民們有沒有想過這問題:GoF的23個design patterns,到底要學多少個?
鄉民甲:什麼是GoF?
鄉民乙:什麼是design patterns?
鄉民丙:為什麼要學這個叫做design patterns的東東?
Teddy:我可能不會回答上面這三個問題…Orz.
***
Teddy第一次很認真的學習GoF的design patterns是在1997第四季到1999年底左右的這段時間,當時Teddy正準備用Java開發一套網路版的進銷存系統,遇到許多設計上的問題。那時候偶然在BBS的某個討論區裡面看到有人在討論Design Patterns這本書,感覺好像很不錯,於是Teddy趕緊找一天到天瓏書局把這本書買回家。買回家之後花了一段時間很認真的把GoF整本書看完。有些patterns(例如Singleton,Factory Method,Template Method,Observer,Proxy,Adapter,Composite,Command等)看了幾次之後,發現可以解決手邊專案的設計問題,就馬上把這些patterns應用到專案中,因此對這些patterns的體認就比較深刻。有些當時沒看懂的,像是Flyweight,Memento,Interpreter,後來在工作中「自然而然」也沒有需要用到它們的場合,所以就放心的把它們給遺忘啦。23個patterns的名字Teddy全部都記得,但是經常有在使用的總是脫離不了那十幾個,沒用到的那幾個就變成陌生人了。
就這樣,大約在2-3年前,Teddy在研究某個例外處理設計的問題,突然想到說:「GoF裡面的patterns會不會有那些可以拿來輔助例外處理設計?」於是Teddy把書本打看,一個pattern接著一個pattern看過去。耶,這個當年被Teddy給遺忘的Memento好像可以拿來使用耶。
翻開Design Patterns這本書關於Memento的解釋:
Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later.
所以Memento可以拿來實作例外處理設計中,很重要的「狀態回復(state recovery)」。此時Teddy突然覺得有點感慨:「Design Patterns裡面的這些patterns十年前Teddy就都看過了,怎麼沒有把每一個都學起來呢?如果早點發覺Memento可以應用在state recovery的設計,就可以少花很多時間在這個設計問題上面」。
***
回到原本的問題:GoF的23個design patterns,到底要學多少個?
有機會的話最好是每個都學。當然,學了不一定會用到,但是沒學,幾乎可以肯定「用不到」。
***
友藏內心獨白:現在要學design patterns容易多了,因為市面上談design patterns書有好多本可以參考。
就像獨孤九劍也不是每一式都會用得到,什麼破鞭破索式,比較少人用的兵器就用不到那幾式。破氣式那種面對超級高手才會用到的,也會很少用,但如果都不學,令狐沖面對東方不敗等超高手,也會敗陣...
回覆刪除