| 劃分類型 | 模式名稱 | 描述 | 《設計模式》中收錄 | 《代碼大全》中提及[1] |
|---|
| 建立型模式 |
| 抽象工廠 | 為一個產品族提供了統一的建立介面。當需要這個產品族的某一系列的時候,可以從抽象工廠中選出相應的系列建立一個具體的工廠類。 | 是 | 是 |
| 工廠方法 | 定義一個介面用於建立對象,但是讓子類決定初始化哪個類。工廠方法把一個類的初始化下放到子類。 | 是 | 是 |
| 建造者 | 將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 | 是 | 否 |
| 惰性初始化 | 推遲對象的建立、資料的計算等需要耗費較多資源的操作,只有在第一次訪問的時候才執行。 | 否 | 否 |
| 對象池 | 通過回收利用對象避免取得和釋放資源所需的昂貴成本。 | 否 | 否 |
| 原型 | 用原型實例指定建立對象的種類,並且通過拷貝這些原型,新增的對象。 | 是 | 否 |
| 單例 | 確保一個類只有一個實例,並提供對該實例的全域訪問。 | 是 | 是 |
| 多例(英語:Multiton pattern) | 確保一個類只有命名的實例,並提供對這些實例的全域訪問。 | 否 | 否 |
| 資源取得為初始化 | 通過繫結到合適對象的生命周期來確保資源被適當地釋放。 | 否 | 否 |
| 結構型模式 |
| 配接器 | 將某個類的介面轉換成客戶端期望的另一個介面表示。配接器模式可以消除由於介面不匹配所造成的類相容性問題。 | 是 | 是 |
| 橋接 | 將一個抽象與實現解耦,以便兩者可以獨立的變化。 | 是 | 是 |
| 合成 | 把多個對象組成樹狀結構來表示局部與整體,這樣使用者可以一樣的對待單個對象和對象的組合。 | 是 | 是 |
| 修飾 | 向某個對象動態地添加更多的功能。修飾模式是除類繼承外另一種擴充功能的方法。 | 是 | 是 |
| 門面 | 為子系統中的一組介面提供一個一致的介面, 外觀模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。 | 是 | 是 |
| 享元 | 通過共享以便有效的支援大量小顆粒對象。 | 是 | 否 |
| 代理 | 為其他對象提供一個代理以控制對這個對象的訪問。 | 是 | 否 |
| 行為型模式 |
| 黑板(英語:Blackboard (design pattern)) | 廣義的觀察者在系統範圍內交流資訊,允許多位讀者和寫者。 | 否 | 否 |
| 責任鏈 | 為解除請求的傳送者和接收者之間耦合,而使多個對象都有機會處理這個請求。將這些對象連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個對象處理它。 | 是 | 否 |
| 命令 | 將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求紀錄檔,以及支援可取消的操作。 | 是 | 否 |
| 直譯器 | 給定一個語言, 定義它的文法的一種表示,並定義一個直譯器, 該直譯器使用該表示來解釋語言中的句子。 | 是 | 否 |
| 迭代器 | 提供一種方法順序訪問一個聚合對象中各個元素, 而又不需暴露該對象的內部表示。 | 是 | 是 |
| 中介者 | 包裝了一系列對象相互作用的方式,使得這些對象不必相互明顯作用,從而使它們可以鬆散偶合。當某些對象之間的作用發生改變時,不會立即影響其他的一些對象之間的作用,保證這些作用可以彼此獨立的變化。 | 是 | 否 |
| 備忘錄 | 備忘錄對象是一個用來儲存另外一個對象內部狀態的快照的對象。備忘錄模式的用意是在不破壞封裝的條件下,將一個對象的狀態捉住,並外部化,儲存起來,從而可以在將來合適的時候把這個對象還原到儲存起來的狀態。 | 是 | 否 |
| 空對象 | 通過提供預設對象來避免空參照。 | 否 | 是 |
| 觀察者 | 在對象間定義一個一對多的聯絡性,由此當一個對象改變了狀態,所有其他相關的對象會被通知並且自動重新整理。 | 是 | 是 |
| 規格(英語:Specification pattern) | 以布林形式表示的可重繫結的商業邏輯。 | 否 | 否 |
| 狀態 | 讓一個對象在其內部狀態改變的時候,其行為也隨之改變。狀態模式需要對每一個系統可能取得的狀態創立一個狀態類的子類。當系統的狀態變化時,系統便改變所選的子類。 | 是 | 否 |
| 策略 | 定義一個演算法的系列,將其各個分裝,並且使他們有互動性。策略模式使得演算法在使用者使用的時候能獨立的改變。 | 是 | 是 |
| 模板方法 | 模板方法模式準備一個抽象類,將部分邏輯以具體方法及具體構造子類的形式實現,然後聲明一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。先構建一個頂級邏輯框架,而將邏輯的細節留給具體的子類去實現。 | 是 | 是 |
| 訪問者 | 封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改,接受這個操作的資料結構可以保持不變。訪問者模式適用於資料結構相對未定的系統,它把資料結構和作用於結構上的操作之間的耦合解脫開,使得操作集合可以相對自由的演化。 | 是 | 否 |
| 併發型模式 | 主動對象(英語:Active object) | 它主要是將方法的內容折解為執行本體和請求,在引入並時(Concurrency)處理時,可透過非同步(asynchronous)處理來達成。 例如:該method 收到request 時,所以這時候caller並不需要在此等待request完成(即為非同步),然後會將其設成active or busy,而後面的request則會進scheduler,request完成時透過其他thread來通知noitfy caller. | 否 | 否 |
| 阻礙(英語:Balking pattern) | 避免在某些狀態不滿足的情形下被執行,因此有點防呆的意思又被稱為(Anti-pattern), 比如你想讀一個ZIP file,當method執行時又去呼叫其他method才發現,該file還未open,這時就會有exception產生,若能在之前就有Balking就能避免。 | 否 | 否 |
| 雙重檢查鎖定 | | 否 | 否 |
| 守衛暫停(英語:Guarded suspension) | | 否 | 否 |
| 會合(英語:Join-pattern) | | 否 | 否 |
| 監測對象 | | 否 | 否 |
| 讀寫鎖 | | 否 | 否 |
| 排程 | | 否 | 否 |
| 執行緒池 | | 否 | 否 |
| 執行緒特定儲存 | | 否 | 否 |
| 反應器 | | 否 | 否 |