設計模式是大量經驗的總結,是依據單一職責、開放——封閉、依賴倒轉……等原則在結構上對代碼進行的優化。經過一段時間的學習,我將所有設計模式做了一個分類,如圖所示:

## 一、類的實例化
本類中的設計模式都旨在優化類的實例化這個過程,通過繼承將復雜的類分解為職責單一的幾個類。為了應對類的數量的增加,引入專門負責實例化的類,通過多態靈活的選擇合適的類實例化成對象。其中單例模式是為了控制對象存在的數量,雖然也是實例化過程有關的模式,但有別于其他模式。
## 二、類間通信
本類中的設計模式主要都是對類間通信有關的優化,從而減低類間耦合度。在本類中接口是非常重要的部分,接口將聯系緊密的兩個類變成不直接相關的兩個類,而是各自于接口建立相對穩定的通信關系。其中代理模式是這些設計模式的基礎模式。
##三、類的組合
本類中的設計模式主要關注于類的組合和聚合關系。即組合/聚合復用原則,減少繼承的使用。
## 四、類的復用
本類中的設計模式旨在對代碼中類的重復使用的優化。避免了需要不停的創建新實例對軟件性能產生的不良影響。或者是對已經死亡的實例的從新使用,避免重建實例。
對于以上的分類,由于自己本身對模式的理解還不是非常清晰,有些模式的分類不是很合理。