---
# System prepended metadata

title: 軟體的設計模式是什麼？
tags: [book, Design Patterns]

---

# 軟體的設計模式是什麼？
###### tags: `Design Patterns` `book`

所以，設計模式的定義是什麼呢？我們可以將設計模式定義如下：

「每一種模式都在說明某種一再出現的問題，並描述解決方法的核心，之後讓你能夠據以變化出各種招式，來解決上萬個類似的問題」。

每一種設計模式除了依照「物件導向設計原則」加以分析設計之外，它們還滿足下面的幾項要求：

## 解決一再出現的問題

軟體開發就是使用某種程式語言，去完成軟體系統中需要具備的功能，而這些功能或許可稱之為「問題」，也就是軟體工程師們必須去克服及實作的。這些功能/問題又可以分成兩類：一種是特別化的問題，就是該問題只會出現在某個軟體系統中：而另一種則是同質性較高的功能/問題，它會經常地出現在不同的軟體實作中，而設計模式所針對的就是這些「一再出現的問題」。因為是一再出現，所以可以歸納出相同的解決方案，讓程式設計師在遇到相同的問題時，能夠立刻使用，不必花費時間去重新思考及設計解決方法。

## 解決問題的方案及核心關鍵

每一種軟體程式設計都是針對一個經常出現的軟體實作問題提供解決方案，而每一個解決方案都會針對問題的核心加以分析討論，並從中找出問題的關鍵點及形成原因，最後設計出能夠解決該問題的類別結構及組裝方式。而這些解決方案本身會先經過「一般化」的思考及歸納，讓解決方案能夠適應更多的變化。

## 可以重複使用的解決方案

重複使用才是設計模式所要強調的，因為解決方案在設計時已經過一般化的思考，所以它們能夠一而再、再而三地被重複應用在所有類似的問題，最後成為上萬個類似的問題的解決方案。