23種GoF設計模式

GoF(Gang of Four)設計模式是由四位計算機科學家 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著的書籍《Design Patterns: Elements of Reusable Object-Oriented Software》中提出的設計模式

目錄

一、創建型模式(Creational Patterns)

單例模式(Singleton)

工廠方法模式(Factory Method)

抽象工廠模式(Abstract Factory)

建造者模式(Builder)

原型模式(Prototype)

二、結構型模式(Structural Patterns)

適配器模式(Adapter)

裝飾器模式(Decorator)

代理模式(Proxy)

外觀模式(Facade)

橋接模式(Bridge)

組合模式(Composite)

享元模式(Flyweight)

三、行為型模式(Behavioral Patterns)

策略模式(Strategy)

觀察者模式(Observer)

命令模式(Command)

狀態模式(State)

責任鏈模式(Chain of Responsibility)

模板方法模式(Template Method)

迭代器模式(Iterator)

中介者模式(Mediator)

備忘錄模式(Memento)

訪問者模式(Visitor)

解釋器模式(Interpreter)


一、創建型模式(Creational Patterns)

關注對象的創建機制,降低對象創建的復雜性

單例模式(Singleton)

確保一個類只有一個實例,并提供全局訪問點。

示例:數據庫連接池、全局配置對象。

工廠方法模式(Factory Method)

定義一個創建對象的接口,但由子類決定實例化哪個類。

示例:日志記錄器(文件日志 vs 數據庫日志)。

抽象工廠模式(Abstract Factory)

創建一組相關或依賴對象的家族,而不指定具體類。

示例:跨平臺的 UI 組件(Windows/Mac 的按鈕、文本框)。

建造者模式(Builder)

分步驟構建復雜對象,分離構造過程與表示。

示例:生成不同格式的文檔(HTML/PDF)。

原型模式(Prototype)

通過復制現有對象來創建新對象,避免重復初始化。

示例:Java 的 Cloneable 接口。

二、結構型模式(Structural Patterns)

關注類和對象的組合方式,形成更大的結構

適配器模式(Adapter)

使不兼容的接口能夠協同工作。

示例:將舊系統的接口適配到新系統。

裝飾器模式(Decorator)

動態地為對象添加額外職責,避免繼承導致的類爆炸。

示例:Java I/O 流(BufferedInputStream 裝飾 FileInputStream)。

代理模式(Proxy)

為其他對象提供一種代理以控制訪問。

示例:遠程代理(RPC)、虛擬代理(延遲加載圖片)。

外觀模式(Facade)

為復雜子系統提供一個統一的簡化接口。

示例:一鍵啟動電腦(封裝 CPU、內存、硬盤的啟動過程)。

橋接模式(Bridge)

將抽象與實現分離,使它們可以獨立變化。

示例:不同形狀(圓形/方形)和顏色(紅/藍)的組合。

組合模式(Composite)

將對象組合成樹形結構以表示“部分-整體”層次。

示例:文件系統(文件+文件夾的統一處理)。

享元模式(Flyweight)

通過共享技術高效地支持大量細粒度對象。

示例:游戲中的重復貼圖(如森林中的樹木)。

三、行為型模式(Behavioral Patterns)

關注對象間的通信和職責分配

策略模式(Strategy)

定義一系列算法,封裝它們并使它們可互換。
示例:排序算法(快速排序、冒泡排序的動態切換)。

觀察者模式(Observer)

定義對象間的一對多依賴,當一個對象狀態改變時,所有依賴者自動收到通知。

示例:事件監聽、消息隊列。

命令模式(Command)

將請求封裝為對象,以便支持撤銷、隊列等操作。

示例:GUI 的按鈕操作、事務管理。

狀態模式(State)

允許對象在內部狀態改變時改變其行為。

示例:電梯的不同狀態(運行/停止/故障)。

責任鏈模式(Chain of Responsibility)

將請求的發送者和接收者解耦,使多個對象都有機會處理請求。

示例:審批流程(經理→總監→CEO)。

模板方法模式(Template Method)

定義算法的骨架,將某些步驟延遲到子類實現。

示例:沖泡飲料(咖啡 vs 茶的通用步驟)。

迭代器模式(Iterator)

提供一種方法順序訪問聚合對象的元素,而不暴露其內部表示。

示例:Java 的 Iterator 接口。

中介者模式(Mediator)

用一個中介對象來封裝一系列對象之間的交互。

示例:聊天室(用戶不直接通信,通過服務器中轉)。

備忘錄模式(Memento)

捕獲并外部化對象的內部狀態,以便以后恢復。

示例:游戲存檔、撤銷操作。

訪問者模式(Visitor)

將算法與對象結構分離,便于新增操作而不修改類。

示例:對不同類型的文件(PDF/Word)執行格式檢查。

解釋器模式(Interpreter)

定義語言的文法,并解釋該語言中的句子。

示例:SQL 解析、正則表達式引擎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76630.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76630.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76630.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Losson 4 NFS(network file system(網絡文件系統))

網絡文件系統:在互聯網中共享服務器中文件資源。 使用nfs服務需要安裝:nfs-utils 以及 rpcbind nfs-utils : 提供nfs服務的程序 rpcbind :管理nfs所有進程端口號的程序 nfs的部署 1.客戶端和服務端都安裝nfs-utils和rpcbind #安裝nfs的軟件rpcbind和…

C++ 入門六:多態 —— 同一接口的多種實現之道

在面向對象編程中,多態是最具魅力的特性之一。它允許我們通過統一的接口處理不同類型的對象,實現 “一個接口,多種實現”。本章將從基礎概念到實戰案例,逐步解析多態的核心原理與應用場景,幫助新手掌握這一關鍵技術。 …

關于C使用Windows API獲取系統管理員權限和對文本屬性的操作,以及windows API的核心操作

關于windows系統的操作程序開發&#xff0c;本文介紹一部分重要的文本屬性操作&#xff0c;和運行計次器。 獲取系統管理員權限 #include <windows.h> VOID ManagerRun(LPCSTR exe, LPCSTR param, INT nShow) { //注意&#xff1a;會跳出提示。SHELLEXECUTEINFO ShExec…

Web 項目實戰:構建屬于自己的博客系統

目錄 項目效果演示 代碼 Gitee 地址 1. 準備工作 1.1 建表 1.2 引入 MyBatis-plus 依賴 1.3 配置數據庫連接 1.4 項目架構 2. 實體類準備 - pojo 包 2.1 dataobject 包 2.2 request 包 2.3 response 包 2.3.1 統一響應結果類 - Result 2.3.2 用戶登錄響應類 2.3.3…

從“被動跳閘”到“主動預警”:智慧用電系統守護老舊小區安全

安科瑞顧強 近年來&#xff0c;老舊小區電氣火災事故頻發&#xff0c;成為威脅居民生命財產安全的重要隱患。據統計&#xff0c;我國居住場所火災傷亡人數遠超其他場所&#xff0c;僅今年一季度就發生8.3萬起住宅火災&#xff0c;造成503人遇難。這些建筑多建于上世紀&#x…

【深入淺出 Git】:從入門到精通

這篇文章介紹下版本控制器。 【深入淺出 Git】&#xff1a;從入門到精通 Git是什么Git的安裝Git的基本操作建立本地倉庫配置本地倉庫認識工作區、暫存區、版本庫的概念添加文件添加文件到暫存區提交文件到版本庫提交文件演示 理解.git目錄中的文件HEAD指針與暫存區objects對象 …

Mybatis的簡單介紹

文章目錄 MyBatis 簡介 1. MyBatis 核心特點2. MyBatis 核心組件3. MyBatis 基本使用示例(1) 依賴引入&#xff08;Maven&#xff09;(2) 定義 Mapper 接口(3) 定義實體類(4) 在 Service 層調用 4. MyBatis 與 JPA/Hibernate 對比 MyBatis 簡介 MyBatis 是一款優秀的 持久層框…

Android Studio 在 Windows 上的完整安裝與使用指南

Android Studio 在 Windows 上的完整安裝與使用指南—目錄 一、Android Studio 簡介二、下載與安裝1. 下載 Android Studio2. 安裝前的依賴準備3. 安裝步驟 三、基礎使用指南1. 首次啟動配置2. 創建第一個項目3. 運行應用4. 核心功能 四、進階功能配置1. 配置 SDK 和工具2. 自定…

WPF 綁定方式舉例

WPF 綁定方式舉例 一、如果ItemsControl 控件的ItemsSource要綁定到List類型&#xff0c;可以如下&#xff1a; List<string> Names new List<string>(); Names.Add("aaa"); Names.Add("bbb");<ItemsControl ItemsSource"{Binding …

LangSmith 設置指南

什么是 LangSmith&#xff1f; LangSmith 是 LangChain 團隊開發的一個統一開發者平臺&#xff0c;用于構建、測試、評估和監控基于大型語言模型&#xff08;LLM&#xff09;的應用程序。它提供了一套工具&#xff0c;幫助開發者更好地理解、調試和改進他們的 LLM 應用。 注冊…

手撕TCP內網穿透及配置樹莓派

注意&#xff1a; 本文內容于 2025-04-13 15:09:48 創建&#xff0c;可能不會在此平臺上進行更新。如果您希望查看最新版本或更多相關內容&#xff0c;請訪問原文地址&#xff1a;手撕TCP內網穿透及配置樹莓派。感謝您的關注與支持&#xff01; 之前入手了樹莓派5&#xff0c;…

Java從入門到“放棄”(精通)之旅——程序邏輯控制④

Java從入門到“放棄”&#xff08;精通&#xff09;之旅&#x1f680;&#xff1a;程序邏輯的完美理解 一、開篇&#xff1a;程序員的"人生選擇" 曾經的我&#xff0c;生活就像一段順序執行的代碼&#xff1a; System.out.println("早上8:00起床"); Syste…

學習筆記九——Rust所有權機制

&#x1f980; Rust 所有權機制 &#x1f4da; 目錄 什么是值類型和引用類型&#xff1f;值語義和引用語義&#xff1f;什么是所有權&#xff1f;為什么 Rust 需要它&#xff1f;所有權的三大原則&#xff08;修正版&#xff09;移動語義 vs 復制語義&#xff1a;變量賦值到底…

Cocos Creator Shader入門實戰(八):Shader實現圓形、橢圓、菱形等頭像

引擎&#xff1a;3.8.5 您好&#xff0c;我是鶴九日&#xff01; 回顧 Shader的學習是一條漫長的道路。 理論知識的枯燥無味&#xff0c;讓很多人選擇了放棄。然而不得不說&#xff1a;任何新知識、新領域的學習&#xff0c;本身面臨的都是問題&#xff01; 互聯網和AI給了我…

深入理解計算機操作系統(持續更新中...)

文章目錄 一、計算機系統漫游1.1信息就是位上下文 一、計算機系統漫游 1.1信息就是位上下文 源程序實際上就是一個由值0和1組成的位&#xff08;又稱為比特&#xff09;&#xff0c;八個位被組織成一組&#xff0c;稱為字節。每個字節表示程序中的某些文本字符 大部分現代計…

YOLO V8的??Anchor-Free??、??解耦頭(Decoupled Head)、損失函數定義(含??Varifocal Loss)

YOLOv8 的 ??Anchor-Free?? 設計摒棄了傳統 YOLO 系列中依賴預定義錨框&#xff08;Anchor Boxes&#xff09;的機制&#xff0c;轉而直接預測目標的中心點和邊界框尺寸。這種設計簡化了模型結構&#xff0c;降低了超參數調優的復雜度提升了檢測速度和精度。以下是其核心實…

QuarkPi-CA2 RK3588S卡片電腦:6.0Tops NPU+8K視頻編解碼+接口豐富,高性能嵌入式開發!

QuarkPi-CA2 RK3588S卡片電腦&#xff1a;6.0Tops NPU8K視頻編解碼接口豐富&#xff0c;高性能嵌入式開發&#xff01; 芯片框架 視頻介紹 https://www.bilibili.com/video/BV1btdbYkEjY 開發板介紹 核心升級&#xff0c;產品炸裂 QuarkPi-CA2卡片電腦搭載瑞芯微RK3588S芯片…

【響應式編程】Reactor 常用操作符與使用指南

文章目錄 一、創建操作符1. just —— 創建包含指定元素的流2. fromIterable —— 從集合創建 Flux3. empty —— 創建空的 Flux 或 Mono4. fromArray —— 從數組創建 Flux5. fromStream —— 從 Java 8 Stream 創建 Flux6. create —— 使用 FluxSink 手動發射元素7. generat…

從靜態綁定驅動模型到現代設備模型 —— 一次驅動架構的進化之旅

&#x1f50d; B站相應的視屏教程&#xff1a; &#x1f4cc; 內核&#xff1a;博文視頻 - 從靜態綁定驅動模型到現代設備模型 在 Linux 內核的發展歷程中&#xff0c;設備驅動結構經歷了從"硬編碼 手動注冊"的早期實現方式&#xff0c;到"設備模型統一管理&qu…

Embedding質量評估、空間塌縮、 Alignment Uniformity

Embedding質量的評估和空間塌縮的解決是自然語言處理&#xff08;NLP&#xff09;和推薦系統領域的關鍵問題。以下是綜合多篇研究的總結&#xff1a; 一、Embedding質量評估方法 基準測試與任務指標 MTEB/C-MTEB&#xff1a;使用多語言或中文的基準測試集&#xff08;如58個數據…