設計模式

出自ProgWiki
跳至導覽 跳至搜尋

設計模式(Design Pattern),參照:『維基百科~Software_design_pattern

模式(Pattern)

建立型模式(Creational Patterns)

模式名稱(中文) 模式名稱(英文) 簡介 參照
抽象工廠模式 Abstract Factory 為一個產品族提供了統一的建立介面。當需要這個產品族的某一系列的時候,可以從抽象工廠中選出相應的系列建立一個具體的工廠類別。 參照:『維基百科~Abstract_factory_pattern
生成器模式 Builder 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 參照:『維基百科~Builder_pattern
依賴注入模式 Dependency Injection 依賴注入是種實現控制反轉用於解決依賴性設計模式。一個依賴關係指的是可被利用的一種對象(即服務提供端)。依賴注入是將所依賴的傳遞給將使用的從屬對象(即客戶端)。該服務是將會變成客戶端的狀態的一部分。傳遞服務給客戶端,而非允許客戶端來建立或尋找服務,是本設計模式的基本要求。 參照:『維基百科~Dependency_injection
工廠方法模式 Factory Method 定義一個介面用於建立物件,但是讓子類別決定初始化哪個類別。工廠方法把一個類別的初始化下放到子類別。 參照:『維基百科~Factory_method_pattern
惰性初始模式 Lazy Initialization 推遲物件的建立、資料的計算等需要耗費較多資源的操作,只有在第一次存取的時候才執行。 參照:『維基百科~Lazy_initialization
多例模式 Multiton 確保一個類別只有命名的實體,並提供對這些實體的全域存取。 參照:『維基百科~Multiton_pattern
物件池模式 Object Pool 通過回收利用物件避免取得和釋放資源所需的昂貴成本。 參照:『維基百科~Object_pool_pattern
原型模式 Prototype 用原型實體指定建立物件的種類,並且通過拷貝這些原型,建立新的物件。 參照:『維基百科~Prototype_pattern
資源取得為初始化 Resource Acquisition Is Initialization (RAII) 通過繫結到合適物件的生命周期來確保資源被適當地釋放。 參照:『維基百科~Resource_Acquisition_Is_Initialization
單例模式 Singleton 確保一個類別只有一個實體,並提供對該實體的全域存取。 參照:『維基百科~Singleton_pattern

結構型模式(Structural Patterns)

模式名稱(中文) 模式名稱(英文) 簡介 參照
配接器模式 Adapter, Wrapper, or Translator 將某個類別的介面轉換成用戶端期望的另一個介面表示。配接器模式可以消除由於介面不匹配所造成的類別相容性問題。 參照:『維基百科~Adapter_pattern
橋接模式 Bridge 將一個抽象與實現解耦,以便兩者可以獨立的變化。 參照:『維基百科~Bridge_pattern
組合模式 Composite 把多個物件組成樹狀結構來表示局部與整體,這樣用戶可以一樣的對待單個物件和物件的組合。 參照:『維基百科~Composite_pattern
修飾模式 Decorator 向某個物件動態地添加更多的功能。修飾模式是除了類別繼承外,另一種擴充功能的方法。 參照:『維基百科~Decorator_pattern
擴展物件模式 Extension object 在不更改層次結構的情況下向層次結構添加功能。
外觀模式 Facade 為子系統中的一組介面提供一個一致的介面, 外觀模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。 參照:『維基百科~Facade_pattern
享元模式 Flyweight 通過共用以便有效的支援大量小物件。 參照:『維基百科~Flyweight_pattern
前端控制器模式 Front Controller 該模式與Web應用程序的設計有關。 它提供了一個集中的入口點來處理請求。 參照:『維基百科~Front_controller
標記界面模式 Marker Interface 空的接口,用於將元數據與類別相關​​聯。 參照:『維基百科~Marker_interface_pattern
模組模式 Module 將幾個全域使用的相關元素(例如類別,單例,方法)分組為單個概念實體。 參照:『維基百科~Module_pattern
代理模式 Proxy 為其他物件提供一個代理以控制對這個物件的存取。 參照:『維基百科~Proxy_pattern
雙胞胎模式 Twin 允許使用不支持此功能的程式語言對多重繼承進行建模。 參照:『維基百科~Twin_pattern

行為型模式(Behavioral Patterns)

模式名稱(中文) 模式名稱(英文) 簡介 參照
黑板模式 Blackboard 廣義的觀察者在系統範圍內交流資訊,允許多位讀者和寫者。 參照:『維基百科~Blackboard_(design_pattern)
責任鏈模式 Chain of Responsibility 為解除請求的傳送者和接收者之間耦合,而使多個物件都有機會處理這個請求。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個物件處理它。 參照:『維基百科~Chain_of_responsibility_pattern
命令模式 Command 將一個請求封裝為一個物件,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求紀錄檔,以及支援可取消的操作。 參照:『維基百科~Command_pattern
直譯器模式 Interpreter 給定一個語言, 定義它的文法的一種表示,並定義一個直譯器, 該直譯器使用該表示來解釋語言中的句子。 參照:『維基百科~Interpreter_pattern
疊代器模式 Iterator 提供一種方法順序存取一個聚合物件中各個元素, 而又不需暴露該物件的內部表示。 參照:『維基百科~Iterator_pattern
中介者模式 Mediator 包裝了一系列物件相互作用的方式,使得這些物件不必相互明顯作用,從而使它們可以鬆散偶合。當某些物件之間的作用發生改變時,不會立即影響其他的一些物件之間的作用,保證這些作用可以彼此獨立的變化。 參照:『維基百科~Mediator_pattern
備忘錄模式 Memento 備忘錄物件是一個用來儲存另外一個物件內部狀態的快照的物件。備忘錄模式的用意是在不破壞封裝的條件下,將一個物件的狀態捉住,並外部化,儲存起來,從而可以在將來合適的時候把這個物件還原到儲存起來的狀態。 參照:『維基百科~Memento_pattern
空物件模式 Null Object 通過提供預設物件來避免空參照。 參照:『維基百科~Null_Object_pattern
觀察者模式 / 發布與訂閱模式 Observer or Publish/subscribe 在物件間定義一個一對多的聯絡性,由此當一個物件改變了狀態,所有其他相關的物件會被通知並且自動重新整理。
僕人模式 Servant 為一組類別定義通用功能。對於給定的一組類別,僕人模式通常也稱為幫助程序類別或實用程序類別實現。輔助類別通常沒有物件,因此它們具有作用於不同種類的類別物件的所有靜態方法。 參照:『維基百科~Servant_(design_pattern)
規格模式 Specification 以布林形式表示的可重繫結的商業邏輯。 參照:『維基百科~Specification_pattern
狀態模式 State 讓一個物件在其內部狀態改變的時候,其行為也隨之改變。狀態模式需要對每一個系統可能取得的狀態創立一個狀態類的子類別。當系統的狀態變化時,系統便改變所選的子類別。 參照:『維基百科~State_pattern
策略模式 Strategy 定義一個演算法的系列,將其各個分裝,並且使他們有互動性。策略模式使得演算法在用戶使用的時候能獨立的改變。 參照:『維基百科~Strategy_pattern
模板方法模式 Template Method 模板方法模式準備一個抽象類,將部分邏輯以具體方法及具體構造子類別的形式實現,然後聲明一些抽象方法來迫使子類別實現剩餘的邏輯。不同的子類別可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。先構建一個頂級邏輯框架,而將邏輯的細節留給具體的子類別去實現。 參照:『維基百科~Template_method_pattern
訪問者模式 Visitor 封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改,接受這個操作的資料結構可以保持不變。存取者模式適用於資料結構相對未定的系統,它把資料結構和作用於結構上的操作之間的耦合解脫開,使得操作集合可以相對自由的演化。 參照:『維基百科~Visitor_pattern

併發型模式(Concurrency Patterns)

模式名稱(中文) 模式名稱(英文) 簡介 參照
主動物件模式 Active Object 使方法執行與駐留在其自己的控制線程中的方法調用脫鉤。 目標是通過使用異步方法調用和用於處理請求的調度程序來引入並發。 參照:『維基百科~Visitor_pattern
止步模式 Balking 僅在對象處於特定狀態時才對其執行操作。 參照:『維基百科~Balking_pattern
綁定屬性模式 Binding properties 組合多個觀察者以強制以某種方式同步或協調不同對像中的屬性。 參照:『維基百科~Binding_properties_pattern
計算核心模式 Compute kernel 多次並行執行相同的計算,不同之處在於用於非分支指針數學的整數參數(如GPU優化的矩陣乘法或卷積神經網絡)與共享數組中使用的整數參數不同。 參照:『維基百科~Compute_kernel
雙重檢查鎖定模式 Double-checked locking 首先以不安全的方式測試鎖定標準(鎖定提示),以減少獲取鎖定的開銷;只有成功了,實際的鎖定邏輯才會繼續進行。

當以某些語言/硬件組合實現時,可能是不安全的。 因此,有時可以將其視為反模式 。

參照:『維基百科~Double_checked_locking_pattern
事件基礎同步模式 Event-Based Asynchronous Pattern 解決多線程程序中出現的異步模式問題。 參照:『維基百科~Event-Based_Asynchronous_Pattern
防護懸掛模式 Guarded suspension 管理在執行操作之前既需要獲取鎖又要滿足先決條件的操作。 參照:『維基百科~Guarded_suspension
加入模式 Join 聯接模式提供了一種通過消息傳遞編寫並發,並行和分佈式程序的方法。 與使用線程和鎖相比,這是一個高級編程模型。 參照:『維基百科~Join-pattern
鎖模式 Lock 一個執行緒在資源上放置一個“鎖”,以防止其他執行緒訪問或修改它。 參照:『維基百科~Lock_(computer_science)
訊息設計模式 Messaging design pattern (MDP) 允許在組件和應用程序之間交換信息(即消息)。 參照:『維基百科~Messaging_pattern
監控物件模式 Monitor object 一個物件,其方法會相互排斥,從而防止多個物件錯誤地嘗試同時使用它。 參照:『維基百科~Monitor_(synchronization)
反應器模式 Reactor 反應器物件為必須同步處理的資源提供了異步接口。 參照:『維基百科~Reactor_pattern
讀寫鎖模式 Read-write lock 允許對對象的並發讀取訪問,但需要寫操作的獨占訪問。 參照:『維基百科~Read/write_lock_pattern
排程模式 Scheduler 明確控制執行緒何時可以執行的單執行緒代碼。 參照:『維基百科~Scheduler_pattern
執行緒池模式 Thread Pool 創建了許多執行緒來執行許多任務,這些任務通常按隊列組織。 通常,任務多於線程。可以認為是物件池模式的特殊情況。 參照:『維基百科~Thread_pool_pattern
執行緒特定儲存模式 Thread-Specific Storage 執行緒本地的靜態或“全域”記憶體。 參照:『維基百科~Thread-Specific_Storage

參考書目

其他

FAQ

設計模式的相關爭議