一張圖快速瞭解23種設計模式

萬貓學社發表於2022-02-25

設計模式

設計模式是對被用來在特定場景下解決一般設計問題的類和相互通訊的物件的描述。

這是《設計模式:可複用物件導向軟體的基礎》(Design Patterns: Elements of Reusable Object-Oriented)中對設計模式的定義。看完以後你會不會和我有一樣的感覺:這特麼說是啥?

於是,我找到了英文原文:

The design patterns are descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context.

稍微翻譯一下:設計模式是對互相通訊物件和類的描述,這些物件和類被定製以解決特定場景下的一般設計問題。(一些技術書籍晦澀難度,甚至語義不通,大多數是翻譯的鍋。)

也可以理解為設計模式是某一類問題的通用解決方案,使用設計模式的目的是為了可重用程式碼,提高程式碼的可擴充套件性和可維護性。

建立模式

用於建立物件,為設計類例項化新物件提供指南。

中文名稱 英文名稱 簡要說明 速記關鍵字
工廠方法 Factory Method 定義了建立物件的介面,讓子類決定例項化哪個類。 動態生產物件
抽象工廠 Abstract Factory 提供一個可以建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。 生產系列物件
構建器 Builder 將一個複雜物件的構建與其表示分離,使得同樣的構建過程可以建立不同的表示。 複製物件構造
原型 Prototype 通過拷貝原型物件建立新的物件。 克隆物件
單例 Singleton 確保一個類只有一個例項,並提供一個訪問它的全域性訪問點。 單例項

結構型

用於處理類或物件的組合,對類如何設計以形成更大的結構提供指南。

中文名稱 英文名稱 簡要說明 速記關鍵字
介面卡 Adapter 將一個類的介面轉換成希望的另外一個介面,使得原本不相容的介面可以協同工作。 轉化介面
橋接 Bridge 將類的抽象部分與它的實現分離,使它們都可以獨立地變化。 繼承樹拆分
組合 Composite 將物件組合成樹形結構以表示“部分-整體”的層次結構,同時對單個物件和組合物件的使用保持一致。 樹形目錄結構
裝飾 Decorator 動態地給一個物件新增一些額外的職責。 動態附加職責
外觀 Facade 為子系統中的一組介面提供一個統一的介面。 對外統一介面
享元 Flyweight 運用共享物件有效地支援大量細粒度的物件。 漢字編碼
代理 Proxy 為控制物件的訪問而提供的代理物件。 快捷方式

行為型

用於描述類或物件的互動以及職責的分配,對類之間互動以及分配責任的方式提供指南。

中文名稱 英文名稱 簡要說明 速記關鍵字
職責鏈 Chain of Responsibility 將物件連成一條鏈,並沿著這條鏈傳遞請求,直到有一個物件處理它。 傳遞職責
命令 Command 將請求封裝為物件,就可以儲存、傳遞命令,以及支援可撤銷的操作。 日誌記錄,可撤銷
直譯器 Interpreter 可以解釋自定義語法表示的直譯器。 虛擬機器的機制
迭代器 Iterator 提供一種方法可以順序訪問集合中的各個元素,又不需要暴露該集合的內部表示。 資料集
中介者 Mediator 用一箇中介物件來封裝一系列的物件互動。 不直接引用
備忘錄 Memento 捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。 遊戲存檔
觀察者 Observer 定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。 訂閱、廣播、聯動
狀態 State 允許物件在其內部狀態改變時改變它的行為。 狀態變成類
策略 Strategy 定義一系列的演算法,把它們一個個封裝起來,並且使它們可相互替換。 多方案切換
模板方法 Template Method 定義一個操作中的演算法的骨架,使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 框架
訪問者 Visitor 表示一個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。 資料與操作分離

“你跟講了這麼多,說好的圖呢?”
“不要著急,最好的總是在不經意的時候出現。”

微信公眾號:萬貓學社

微信掃描二維碼

關注後回覆「電子書」

獲取12本Java必讀技術書籍

一張圖快速瞭解23種設計模式

最後,感謝你的點贊關注,帥氣又美麗。

相關文章