2008年6月25日 星期三

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




「什麼是Design Pattern?」同學問

「不知道ㄟ,教授沒教過,應該不重要...吧?」我回答

「很重要吧」

「沒差拉,考試又不考,Case Study啦~~」

那時的我,大學三年級

=============n年後===============

「連Factory Pattern跟Observer Pattern都不會?」我歇斯底里的怒吼

「咦?這些是什麼東西?」學弟滿臉疑惑說道

「就是說$!@#%$~~~~~,瞭了嗎?」

「....?」

「....orz」我放棄了

但其實回過神來仔細想想,跟當年的我不也是這樣嗎

所以說,Design Pattern到底是什麼?

Wiki說:
是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案
本書說:是種可再利用的經驗與智慧
良葛格說:是在解決問題的過程中,一些良好思路的經驗集成
我說:是經過無數血與淚所堆砌出的智慧結晶

在物件導向語言(C++,Java,C#.Net,VB.Net)中
它已經是個隨處可見的真理


我讀了多少


次數多到不清
,不過會用才是真的會

重點心得

  1. Obersver(觀察者):愛稱為電台模式,通常是為解決一個Model對應到多個View之間的互動,寫Swing常用到 --『甲愛貢,那A謀企電台貢厚全台灣聽』
  2. Decorator(裝飾者):又稱之為裝甲模式,通常我用都會包太多層並難以理解,不過卻相當程度能動態調整 --『你妝會不會化太濃了』
  3. Factory(工廠):我第一個用的Pattern,是拿來解決,不同資料來源搭配到同一個介面上的問題 --『又到了開分公司的時候了』
  4. Singleton(獨體):個人覺得是最簡單也最困難的一個,我只拿來做紀錄Log到檔案用過
  5. Command(命令):愛稱遙控器模式,我常拿來做權限部分,拿來分離登入物件及功能 --『不要亂拿遙控器,很危險的
  6. Adapter(轉接),據說能解決銜接舊系統的問題,沒用過
  7. Facade(表象),愛稱幻覺,整理一駝亂的好幫手,趕時間或感覺Class拆太多的時候不錯 --『雖然一切都是幻覺,但是真的嚇到我了
  8. Template(樣板),整理很相似的Code時候用的,我不太常用
  9. Iterator(反覆),有效做重複的事,看到很多for - if - for -if 能考慮用這個,看起來沒什麼了不起,但常常意外的有效果 --『下一位下一位下一位
  10. Composite(合成) ,樹狀結構跟XML的好朋友,在複雜的加總或計算中算好用 ,尤其是用for loop或SQL指令會做很亂的那種 --『無.敵.合.體.
  11. State(狀態),通常改變狀態代表邏輯行為也要改變,這個Pattern能讓人先專注在狀態變化,而不是行為 --『Oh!It is another Final State Machine!』
  12. Proxy(代理人),也是個看起來簡單但變化很多的Pattern,不是很常用
  13. Model -View -Control (MVC) ,每個寫過網頁的都號稱會用MVC,但其實MVC沒這麼簡單,有時候把Code要放在 Model or View or Control 不是非常直覺的事,我很懷疑都沒人有這種煩惱嗎?
結論

Design Pattern不是萬能的,但是看不懂可是萬萬不能,使用的太普遍了

生平不識模式趣,寫盡程式也枉然

推薦本書:

Design Pattern 一直被當作很難或很高深的理論(起碼對我而言),但是Head First系列的變態作者,加上大師級的翻譯,就是有辦法寫到連我這笨蛋都看的懂,還帶我看到不一樣的世界,我衷心佩服且感恩
不管懂不懂Design Pattern,一定要看一次

沒有留言: