# 設計模式的分類
## 設計模式的種類
在眾所周知的設計書《Domain-Driven Terms》中,它被描述為:
“設計模式是命名、抽象和識別對可重用的面向對象設計有用的的通用設計結構。設計模式確定類和他們的實體、他們的角色和協作、還有他們的責任分配。
每一個設計模式都聚焦于一個面向對象的設計難題或問題。它描述了在其它設計的約束下它能否使用,使用它后的后果和得失。因為我們必須最終實現我們的設計模式,所以每個設計模式都提供了例子..代碼來對實現進行闡釋。
雖然設計模式被描述為面向對象的設計,它們基于那些已經被主流面向對象語言實現過的解決方案...”
設計模式可以被分成幾個不同的種類。在這個部分我們將復習三個分類,并且在我們進入特定的設計模式詳情之前我們提到該分組下的模式的幾個示例。
### 創建型設計模式
創建型設計模式關注于對象創建的機制方法,通過該方法,對象以適應工作環境的方式被創建。基本的對象創建方法可能會給項目增加額外的復雜性,而這些模式的目的就是為了通過控制創建過程解決這個問題。
屬于這一類的一些模式是:構造器模式(Constructor),工廠模式(Factory),抽象工廠模式 (Abstract),原型模式 (Prototype),單例模式 (Singleton)以及 建造者模式(Builder)。
### 結構設計模式
結構模式關注于對象組成和通常識別的方式實現不同對象之間的關系。該模式有助于在系統的某一部分發生改變的時候,整個系統結構不需要改變。該模式同樣有助于對系統中某部分沒有達到某一目的的部分進行重組。
在該分類下的模式有:裝飾模式,外觀模式,享元模式,適配器模式和代理模式。
### 行為設計模式
行為模式關注改善或精簡在系統中不同對象間通信。
行為模式包括:迭代模式,中介者模式,觀察者模式和訪問者模式。
## 設計模式的分類
在我早起學習設計模式的經驗中,我個人發現,下面的表格是一個非常有用的提醒,大多數模式所提供-它覆蓋了由GOF提出的23種模式。最早的表格由 Elyse Nielsen 在2004年匯總,我已經做了部分修改以適應我們的討論。 我推薦使用該表格作為參考,但要記住大量額外的模式在這里么有提及,但在本書的后續的章節中會提到。
### 關于類的簡單說明
要記住這張表中會有模式引用“類”的概念。JavaScript是一種弱類型語言,不過類可以通過函數模擬出來。 最常見的實現這一點的方法,是先定義一個JavaScript函數,然后再使用這個新的關鍵字創建一個對象。可以通過這種方法像下面這樣給類定義新的屬性與方法。
~~~
// A car "class"
function Car( model ) {
this.model = model;
this.color = "silver";
this.year = "2012";
this.getInfo = function () {
return this.model + " " + this.year;
};
}
~~~
接著我們可以使用上面定義的Car構造函數實例化對象,就像這樣:
~~~
var myCar = new Car("ford");
myCar.year = "2010";
console.log( myCar.getInfo() );
~~~
更多使用JavaScript定義“類”的方法,參見Stoyan Stefanov的關于這些的有用[帖子](http://www.phpied.com/3-ways-to-define-a-javascript-class/)。
- 前言
- 簡介
- 什么是設計模式?
- 設計模式的結構
- 編寫設計模式
- 反模式
- 設計模式的分類
- 設計模式分類概覽表
- JavaScript 設計模式
- 構造器模式
- 模塊化模式
- 暴露模塊模式
- 單例模式
- 觀察者模式
- 中介者模式
- 原型模式
- 命令模式
- 外觀模式
- 工廠模式
- Mixin 模式
- 裝飾模式
- 亨元(Flyweight)模式
- JavaScript MV* 模式
- MVC 模式
- MVP 模式
- MVVM 模式
- 最新的模塊化 JavaScript 設計模式
- AMD
- CommonJS
- ES Harmony
- JQuery 中的設計模式
- 組合模式
- 適配器模式
- 外觀模式
- 觀察者模式
- 迭代器模式
- 惰性初始模式
- 代理模式
- 建造者模式
- jQuery 插件的設計模式
- JavaScript 命名空間模式
- 總結
- 參考