# 模式的應用與學習方式 ###### tags: `Design Patterns` `book` Gof的23種設計模式,被分為三大類別,分別對應到軟體分析設計時需要面對的三個環節: * 生成模式(Creational):產生物件的過程及方式 * 結構模式(Structural):類別或物件之間組合的方式 * 行為模式(Behavioral):類別或物件之間互動或是責任分配的方式 每個大類別之間都有不同的設計模式可以應用。而在模式選擇上,單純就以解決問題為導向,設計者提出需要解決的問題,然後查詢這23種設計模式中,是否有可以解決問題的模式。當然也可以依照GoF的分類方式,先將問題本身做一歸類,然後再從中去尋找合適的設計模式。 ## 過度設計 利用設計模式來進行軟體設計無疑是個良策,但無限制地使用設計模式來進行軟體設計,也會產生一種稱為「過度設計(Over-Enginnering)」的問題:就是當「程式碼的彈性或複雜度超過需求時,就是犯下過度設計的毛病」。簡單來說就是,程式設計師將原本不需要的設計需求加入倒實作中,而這些預先做好的功能,直到專案上市的那一天都根本沒使用過,那麼這些設計就可以稱為「過度設計」。 ## 設計模式的應用 GoF提及的23種設計模式並不是教條式的規則及框架,它們都是「解決問題的方法」的概念呈現。包含了四位作者之一的 John Vlissidesr在其著作《Pattern Hatching: Design Patterns Applied》中都提及: 「沒有規定一定要跟書中有一模一樣的架構圖才能被稱為某一個模式(Pattern)」 《設計模式》一書只是提出了一個規範及定義,並不代表那是唯一的表達方法,所以23個設計模式也可以有其他變形或架構圖。只要是符合GoF所要表達的情境,就可以說是「以某某模式應用的設計方法」。