「什麼是Design Pattern?」同學問
「不知道ㄟ,教授沒教過,應該不重要...吧?」我回答
「很重要吧」
「沒差拉,考試又不考,Case Study啦~~」
那時的我,大學三年級
=============n年後===============
「連Factory Pattern跟Observer Pattern都不會?」我歇斯底里的怒吼
「咦?這些是什麼東西?」學弟滿臉疑惑說道
「就是說$!@#%$~~~~~,瞭了嗎?」
「....?」
「....orz」我放棄了
但其實回過神來仔細想想,跟當年的我不也是這樣嗎
所以說,Design Pattern到底是什麼?
Wiki說:是對
軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案
本書說:是種可再利用的經驗與智慧
良葛格說:是在解決問題的過程中,一些良好思路的經驗集成
我說:是
經過無數血與淚所堆砌出的智慧結晶
在物件導向語言(C++,Java,C#.Net,VB.Net)中
它已經是個隨處可見的真理
我讀了多少:
次數多到不清,不過會用才是真的會
重點心得:- Obersver(觀察者):愛稱為電台模式,通常是為解決一個Model對應到多個View之間的互動,寫Swing常用到 --『甲愛貢,那A謀企電台貢厚全台灣聽』
- Decorator(裝飾者):又稱之為裝甲模式,通常我用都會包太多層並難以理解,不過卻相當程度能動態調整 --『你妝會不會化太濃了』
- Factory(工廠):我第一個用的Pattern,是拿來解決,不同資料來源搭配到同一個介面上的問題 --『又到了開分公司的時候了』
- Singleton(獨體):個人覺得是最簡單也最困難的一個,我只拿來做紀錄Log到檔案用過
- Command(命令):愛稱遙控器模式,我常拿來做權限部分,拿來分離登入物件及功能 --『不要亂拿遙控器,很危險的』
- Adapter(轉接),據說能解決銜接舊系統的問題,沒用過
- Facade(表象),愛稱幻覺,整理一駝亂的好幫手,趕時間或感覺Class拆太多的時候不錯 --『雖然一切都是幻覺,但是真的嚇到我了』
- Template(樣板),整理很相似的Code時候用的,我不太常用
- Iterator(反覆),有效做重複的事,看到很多for - if - for -if 能考慮用這個,看起來沒什麼了不起,但常常意外的有效果 --『下一位,下一位,下一位』
- Composite(合成) ,樹狀結構跟XML的好朋友,在複雜的加總或計算中算好用 ,尤其是用for loop或SQL指令會做很亂的那種 --『無.敵.合.體.』
- State(狀態),通常改變狀態代表邏輯行為也要改變,這個Pattern能讓人先專注在狀態變化,而不是行為 --『Oh!It is another Final State Machine!』
- Proxy(代理人),也是個看起來簡單但變化很多的Pattern,不是很常用
- Model -View -Control (MVC) ,每個寫過網頁的都號稱會用MVC,但其實MVC沒這麼簡單,有時候把Code要放在 Model or View or Control 不是非常直覺的事,我很懷疑都沒人有這種煩惱嗎?
結論:
Design Pattern不是萬能的,但是看不懂可是萬萬不能,使用的太普遍了
生平不識模式趣,寫盡程式也枉然
推薦本書:
Design Pattern 一直被當作很難或很高深的理論(起碼對我而言),但是Head First系列的變態作者,加上大師級的翻譯,就是有辦法寫到連我這笨蛋都看的懂,還帶我看到不一樣的世界,我衷心佩服且感恩
不管懂不懂Design Pattern,一定要看一次