---
# System prepended metadata

title: 模式的應用與學習方式
tags: [book, Design Patterns]

---

# 模式的應用與學習方式
###### 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所要表達的情境，就可以說是「以某某模式應用的設計方法」。