這是一個介紹設計模式 Design Patterns 與架構模式 Architectural Patterns 的系列文章。
Design Patterns,這個聲名遠播的設計概念,在軟體設計的領域中,一直以來是不可或缺的基石。就算我們無意識地忽略它、有意識地迴避它,它都還是如影隨形地出現在各式各樣的角落。基本上,身為一個開發人員,尤其當我們使用物件導向開發時,我們跟 Design Patterns 的相遇就差不多已經命中注定了。
什麼?你說要學設計模式,為什麼不直接去看書就好了?現在市面上介紹 Design Patterns 的書一字排開,大概可以堆滿一個房間。輪得到我們介紹嗎?
很多時候我們看這些 Design Patterns 的教科書(下面會列出我們主要參考哪幾本書),總是會有些不甚明白,或是需要自己實作之後才能領會箇中道理的地方。這個系列的使命就是盡量使用淺顯易懂的方式,讓你看完這個之後,能夠起身大喊「噫!我中了」,彷彿自己也已經真正懂了 Design Patterns 一樣。
如果你是個剛踏進軟體設計的新鮮的肝,從沒聽過什麼是 Design Patterns,恭喜你!今天(還有接下來的一個月)是你的好日子,我們來一起好好認識它吧!
如果你有點軟體設計經驗,大概知道什麼是 Design Patterns,或許還用過個 factory method 或是 composite method,恭喜你!今天也是你的好日子,我們來一起系統性地、好好地比較各種不同的設計模式,分析他們的優缺點與使用時機,讓你可以不用看到什麼都只能用斧頭砍,可以偶爾換換口味,用個金斧頭,或是銀斧頭,砍。
如果你已經是老手,對 Design Patterns 信手捻來、倒背如流、舉一反三,那...歡迎站內信,我們可能有合適的職缺給你 (?)
當我們在設計程式碼,尤其是設計物件與物件之間的關係的時候,我們有兩個目標:能重複使用(reusable)與有彈性(flexible)。當然,這不是簡單的事,很多時候都要依靠經驗累積與不斷嘗試才會找到真正適合的設計。久而久之,一些「模式」出現了。每個模式都是經驗的結晶,有良好的重用性與彈性,並且適合用來解決特定的問題。1994 年,俗稱 GoF (Gang of Four,四人幫) 的四個工程師出版了 Design Patterns: Elements of Reusable Object-Oriented Software,裡面收錄了 23 種常用的模式,「設計模式」因而誕生。
所以說,Design Patterns 並不是先有理論才有實踐,而是實實在在的 try-and-error,並且經過不斷測試後留下來的寶貴經驗。而現在我們看很多模式可能會覺得非常理所當然(理所當然到你會冒出「啊?軟體設計本來不就是應該要這樣嗎?」的疑問),這只是證明了這些設計模式的影響之大,已經滲入了許多軟體開發的原則/架構中,就算沒有真正讀過那本書的人,也都已經不知覺使用 Design Patterns 的概念了。
這個系列最後五篇會將眼光從設計模式拉高一層,介紹並討論一些常見程式架構(Software Architecture Patterns),分別是
程式架構廣義地說,也是設計模式的一種。它的目的同樣是重複使用(code reusability),只是探討的並不是物件與物件之間的關係,而是如何設計一個工程結構—角色要如何分配、要如何劃分各元件職責等等。當一個程式架構發展成熟,可能就會有框架(framework)出現。
是的,這個系列是一個集體力量。我們來自 PicCollage 團隊(PicCollage 是一個神好用、下載量破兩億的照片編輯軟體),是一群聰明能幹又好學不倦(又喜歡自找麻煩)的工程師。如果你有個敏感的靈魂,可能會感受到這個系列裡每篇文章些微不同的風格,但不變的會是我們對文章品質的堅持,還有糟糕的幽默感。
書主要是這兩本:
還有我們團隊裡的各個大神的大腿、與實際使用的程式碼。
預備備—開始!