Design Pattern 設計模式總覽

將會持續更新

在 Design Patterns: Elements of Reusable Object-Oriented Software 一書中,提出並總結了一些常見軟體設計問題的標準解決方案,稱為 Design Pattern。並將這些方法分為三大類:Creational、Structural、Behavioral。其中 Design Pattern 有六大原則:

七大原則

Open-Closed Principle 開放封閉原則

一個軟體實體如類、模組和函式應該對擴充套件開放,對修改關閉

Liskov Substitution Principle 里氏替換原則

所有引用基類的地方必須能透明地使用其子類的物件

Single Responsibility Principle 單一職責原則

一個 Class 只負責一項職責

Dependency Inversion Principle 依賴反轉原則

  • 高層模組不應該依賴低層模組,兩者都應該依賴其抽象
  • 抽象不應該依賴細節
  • 細節應該依賴抽象

Interface Segregation Principles 介面隔離原則

一個 class 對另一個 class 的依賴應該建立在最小的介面上

Law of Demeter / Least Knowledge Principle 迪米特原則

一個物件應該對其他物件有最少的瞭解

Composite Reuse Principle 合成複用原則

儘量使用合成/聚合的方式,而不是使用繼承

  • Creational 創建型

    用於處理建立物件的模式,其核心思想是要把物件的建立和使用分離。

    • Abstract factory 抽象工廠模式:提供一個建立相關或依賴物件的介面,而不指定物件的具體類
    • Builder 生成器模式:將一個複雜物件的建立與它的表示分離,使同樣的建立過程可以建立不同的表示
    • Dependency Injection 相依注入模式:傳遞依賴給調用方,而不是讓讓調用方直接獲得依賴
    • Factory method 工廠模式:允許一個類別的實例化推遲到子類中進行
    • Lazy initialization 延遲初始化模式:將物件的建立,某個值的計算,或者其他代價較高的過程推遲到它第一次需要時進行
    • Multiton 多例模式:確保一個類只有命名的實例,並提供對這些實例的全域存取
    • Object pool 物件池模式:通過回收不再使用的物件,避免建立和銷毀物件時代價高昂的取得和釋放資源的過程
    • Prototype 原型模式:使用原型實例指定要建立的物件類型,通過複製原型建立新的物件
    • RAII 資源取得即初始化模式:通過繫結到合適物件的生命周期來確保資源被適當地釋放
    • Singleton 單例模式:保證一個類只有一個實例,並且提供對這個實例的全域存取方式
  • Structural 結構型

    處理 class 和 object 的組合

    • Adapter 轉接器模式:將一個物件的介面'轉接'成當事人預期的樣子
      • Adapter pipeline 轉接器導管模式:因除錯目的而使用多個轉接器
      • Retrofit Interface:同時使用多個類別的介面的轉接器
    • Bridge 橋接模式:將一個抽象與實現解耦,以便兩者可以獨立的變化
      • Tombstone 墓碑模式:一種中介的查詢物件,包含物件的實際位址
    • Composite 組合模式:樹狀結構的物件,每個物件有相同的介面
      • Aggregate 聚集模式:一種組合模式的版本,包含用於聚集子成員的成員函式
    • Decorator 修飾模式:對一個執行的類別,若使用繼承方式加上新功能可能會新類別的數量呈指數型地增加,可使用此模式來解決
    • Delegation
    • Extensibility 擴充模式:亦即框架,將複雜的程式碼隱藏在簡單的介面後
    • Facade 外觀模式:對於已有的介面建立一個簡化的介面以簡化使用共通任務
    • Flyweight 享元模式:通過共享以便有效的支持大量小顆粒對象
    • Front controller
    • Maker interface:
    • Module
    • Pipes and filters 導線及過濾器模式:一串的處理者,其中每個處理者的輸出是下一個的輸入
    • Opaque pointer
    • Proxy 代理模式:為其他對象提供一個代理以控制對這個對象的訪問
    • Twin
  • Behavioral 行為型

    用來識別對象之間的常用交流模式並加以實現

    • Blackboard 黑板模式:
    • Chain of responsibility 責任鏈模式:處理命令物件或將之傳到下一個可以處理的物件
    • Command 命令模式:命令物件將動作及參數封裝起來
    • "Externalize the stack" "具現化堆疊":使用堆疊將遞迴函式轉成重覆執行
    • Interpreter 直譯器模式:實作特製化的程式語言以解決一系列特殊的問題
    • Iterator 迭代器模式:迭代器用於存取包含器中元素而不用透露底層實作的方式
    • Mediator 調停者模式:對子系統中的介面集面提供一個統一的介面
    • Memento 備忘錄模式:使一個物件還原到前一個狀態的能力(rollback)
    • Null object 空物件模式:扮演預設物件的角色
    • Observer 觀察者模式:亦即發行/訂閱或事件聆聽者。物件註冊去聆聽由另一個物作所引發的事件
      • Weak reference 弱參照模式:將觀察者與可觀察間的藕合程度
    • Protocol stack 協議棧:通訊是由許多封裝成階層式的層所處理
    • Scheduled-task 排程任務模式:在特定區時或時間點執行排程任務(用於即時計算)
    • Servant 僱工模式:
    • Single-serving visitor:最佳化訪問者。使用一次後即行刪除
    • Specification 規格模式:以布林值的方式來重組事務邏輯
    • State 狀態模式:在執行可以部分改變物件的一種方法
    • Strategy 策略模式:在執行時依需求而選擇演算法
    • Template method 模板方法模式:描述一個程式的骨架
    • Visitor 觀察者模式:一種從物件中取出演算法的方式
  • Concurrency 併發型

    用來處理多執行緒編程範式的一類設計模式

    • Active Object 主動物件模式:
    • Actor
    • Balking 阻礙模式:
    • Barrier
    • Binding properties
    • Coroutine
    • Compute kernel
    • Double-checked locking 雙重檢查鎖定模式:
    • Event-based asynchronous
    • Fiber
    • Futex
    • Futures and promises
    • Guarded suspension 守衛模式:
    • Immutable object
    • Join
    • Leaders/followers
    • Lock
    • Messaging
    • Monitor object 監視物件模式:
    • Nuclear reaction
    • Proactor
    • Reactor 反應器模式:
    • Read write lock 讀寫鎖模式:
    • Scheduler 調度者模式:
    • STM
    • Thread pool 執行緒池模式:
    • Thread-local storage 執行緒本地儲存模式:

Reference

Did you find this article valuable?

Support 攻城獅 by becoming a sponsor. Any amount is appreciated!