C++設計模式分類(GOF-23種設計模式)

文章目錄

  • GOF-23 設計模式分類
    • 一、從目的分類
      • 1. 創建型(Creational)模式
      • 2. 結構型(Structural)模式
      • 3. 行為型(Behavioral)模式
    • 二、從范圍分類
      • 1. 類模式(Class Pattern)
      • 2. 對象模式(Object Pattern)
    • 三、分類說明
  • 從封裝變化角度對模式分類
    • 一、組件協作
      • 定義
      • Template Method(模板方法模式)
      • Observer / Event(觀察者/事件模式)
      • Strategy(策略模式)
    • 二、單一職責
      • Decorator(裝飾器模式)
      • Bridge(橋接模式)
    • 三、對象創建
      • Factory Method(工廠方法模式)
      • Abstract Factory(抽象工廠模式)
      • Prototype(原型模式)
      • Builder(建造者模式)
    • 四、對象性能
      • Singleton(單例模式)
      • Flyweight(享元模式)
    • 五、接口隔離
      • Fa?ade(外觀模式)
      • Proxy(代理模式)
      • Mediator(中介者模式)
      • Adapter(適配器模式)
    • 六、狀態變化
      • Memento(備忘錄模式)
      • State(狀態模式)
    • 七、數據結構
      • Composite(組合模式)
      • Iterator(迭代器模式)
      • Chain of Responsibility(責任鏈模式)
    • 八、行為變化
      • Command(命令模式)
      • Visitor(訪問者模式)
    • 九、領域問題
      • Interpreter(解釋器模式)

GOF-23 設計模式分類

一、從目的分類

1. 創建型(Creational)模式

  • 核心目標:應對需求變化對對象創建時具體類型實現的影響
  • 實現方式:將對象創建的職責延遲到子類或其他對象
  • 典型模式:工廠方法、抽象工廠、單例、建造者、原型

2. 結構型(Structural)模式

  • 核心目標:應對需求變化對對象結構的影響
  • 實現方式:通過類繼承或對象組合構建更靈活的結構
  • 典型模式:適配器、裝飾器、代理、組合、橋接

3. 行為型(Behavioral)模式

  • 核心目標:應對需求變化對多個交互對象的影響
  • 實現方式:通過類繼承或對象組合劃分職責
  • 典型模式:觀察者、策略、命令、狀態、模板方法

二、從范圍分類

1. 類模式(Class Pattern)

  • 關注點:類與子類的靜態關系
  • 實現方式:依賴繼承機制(編譯時確定)
  • 典型模式:模板方法、工廠方法、抽象工廠

2. 對象模式(Object Pattern)

  • 關注點:對象間的動態關系
  • 實現方式:依賴組合/聚合(運行時確定)
  • 典型模式:策略、裝飾器、觀察者、代理

三、分類說明

分類維度創建型結構型行為型
目的解決對象創建問題解決對象結構問題解決對象交互與職責劃分問題
范圍可能涉及類模式/對象模式主要為對象模式主要為對象模式

從封裝變化角度對模式分類

一、組件協作

定義

現代軟件專業分工之后的第一個結果是“框架與應用程序的劃分”,“組件協作”模式通過晚期綁定,來實現框架與應用程序之間的松耦合,是二者之間協作時常用的模式。

Template Method(模板方法模式)

定義算法骨架,延遲部分步驟到子類。

Observer / Event(觀察者/事件模式)

一對多依賴關系,狀態變化時通知觀察者。

Strategy(策略模式)

封裝可替換的算法策略,動態切換行為。


二、單一職責

Decorator(裝飾器模式)

動態添加職責,避免類爆炸。

Bridge(橋接模式)

分離抽象與實現,獨立擴展兩者。


三、對象創建

Factory Method(工廠方法模式)

定義對象創建接口,由子類實現具體創建。

Abstract Factory(抽象工廠模式)

創建一組相關或依賴的對象族。

Prototype(原型模式)

通過復制原型對象創建新實例。

Builder(建造者模式)

分步構建復雜對象。


四、對象性能

Singleton(單例模式)

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

Flyweight(享元模式)

共享細粒度對象,減少內存消耗。


五、接口隔離

Fa?ade(外觀模式)

簡化復雜子系統的接口。

Proxy(代理模式)

控制對目標對象的訪問。

Mediator(中介者模式)

集中管理對象交互,降低耦合。

Adapter(適配器模式)

適配不兼容接口,促進復用。


六、狀態變化

Memento(備忘錄模式)

保存和恢復對象狀態。

State(狀態模式)

對象行為隨內部狀態改變。


七、數據結構

Composite(組合模式)

樹形結構組合對象。

Iterator(迭代器模式)

順序訪問聚合對象元素。

Chain of Responsibility(責任鏈模式)

鏈式傳遞請求,靈活處理。


八、行為變化

Command(命令模式)

將請求封裝為對象,支持參數化和日志記錄。

Visitor(訪問者模式)

對元素集合執行操作,分離算法與結構。


九、領域問題

Interpreter(解釋器模式)

定義語言語法并解釋執行。

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

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

相關文章

AbMole| LY294002(M1925)

LY294002是一種廣譜的PI3K抑制劑,對PI3Kα/δ/β的IC50分別為0.5 μM/0.57 μM/0.97 μM。LY294002 也可以抑制 CK2 的活性,IC50 為 98 nM。LY294002 還是一種競爭性 DNA-PK 抑制劑,可逆結合 DNA-PK 的激酶結構域,IC50 為 1.4 μM…

第1章,[標簽 Win32] :第一個 WIn32 程序,MessageBox 函數

專欄導航 上一篇:第1章,[標簽 Win32] :第一個 WIn32 程序,程序入口 回到目錄 下一篇:無 本節前言 本節的學習,需要前兩節的內容作為先修知識。如果還沒有去看本專欄的前兩節,請你先去學習它…

求助帖:學Java開發方向還是網絡安全方向前景好

最近網絡安全被一個培訓機構吹得天花亂墜,雖然他家既有網安又有java和UI,我也是學軟件工程的(山西某211,此機構是每年和我們學校合作的校企公司),但那里的老師仍然大力推薦我學網絡安全(滲透、代…

OpenCV 圖像仿射變換之旋轉

一、知識點 1、void warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags INTER_LINEAR, int borderMode BORDER_CONSTANT, …

HCIP-數據通信基礎

前言:本博客僅作記錄學習使用,部分圖片出自網絡,如有侵犯您的權益,請聯系刪除 本篇筆記是根據B站上的視頻教程整理而成,感謝UP主的精彩講解!如果需要了解更多細節,可以參考以下視頻:…

C語言基本數據類型與變量詳解

# C語言基本數據類型與變量詳解 ## 數據類型概述 在C語言中,數據類型決定了變量在內存中的存儲方式和大小,以及可以對其執行的操作。合理選擇數據類型能夠提高程序的效率和準確性,避免內存浪費和數據溢出等問題。 C語言的基本數據類型主要包括…

Babylon.js學習之路《十、高級幾何體:自定義模型與復雜形狀生成》

文章目錄 1. 引言:高級幾何體的應用場景2. 參數化建模:Babylon.MeshBuilder2.1 擴展幾何體類型2.2 自定義多邊形(ExtrudePolygon) 3. 頂點級建模:自定義VertexData3.1 手動定義頂點數據3.2 動態生成地形(高…

【趙渝強老師】Kubernetes的安全框架

Kubernetes集群的安全框架主要由以下認證、鑒權和準入控制三個階段組成。這三個階段的關系如下圖所示。 視頻講解如下 【趙渝強老師】Kubernetes的安全框架 認證(Authentication) 當客戶端與Kubernetes集群建立HTTP通信時,首先HTTP請求會進…

CDN與靜態資源優化

CDN與靜態資源優化 在現代Web系統和AI應用中,隨著用戶訪問量的不斷攀升,靜態資源(如HTML、CSS、JavaScript、圖片、音視頻、模型文件等)帶來的負載日益沉重。尤其在大模型推理、前端渲染、廣告投放等場景中,靜態資源的…

如何填寫“appium inspector”內容?

1. 確認已經開啟appium的服務,運行appium 參考內容:{"appium:platformName": "Android", # 系統名稱"appium:platformVersion": "9", # 安卓版本,看設備"appium:deviceName": "3d…

mysql server層做了什么

服務器處理客戶端請求 服務器程序在處理來自客戶端的查詢請求時,大致需要分為3部分:連接管理、解析與優化、存儲引擎。 連接管理 每當有一個客戶端進程連接到服務器進程時,服務器進程都會創建一個線程專門處理與這個客戶端的交互&#xff…

APISIX 簡介:云原生 API 網關的架構與實踐

文章目錄 引言:APISIX 概述基于Nginx構建的原因基于etcd構建的原因 架構圖示架構分層解析管理層:人機交互與配置入口控制層:配置管理與集群協調數據面:請求處理與流量轉發說明:關于OpenRestry 引言:APISIX …

【AI作畫】第3章 LORA加載器

目錄 LORA加載器 管道信息 ?編輯 ?編輯 ?編輯 lora模型的串接 作品集 LORA加載器 前面我們已經分析過節點目錄了,現在我們來看一下LORA加載器。我們進行圖片渲染,一般都需要LORA模型的。 首先,我們“鼠標右鍵——添加節點——…

Xilinx XC7A12T?1CPG238I Artix?7 FPGA

XC7A12T?1CPG238I 以其獨特的性能與封裝組合,成為諸多工程師的首選方案。下面,我們從多個維度對這款芯片做深入剖析。 一、產品定位與封裝特點 XC7A12T?1CPG238I 屬于賽靈思(Xilinx)28?nm Artix?7 系列中的入門級型號&#x…

如何利用 Java 爬蟲獲得微店商品詳情:實戰指南

在電商領域,微店作為眾多商家的線上銷售渠道之一,其商品詳情數據對于市場分析、競品研究和商業決策具有重要價值。Java 爬蟲技術可以幫助我們高效地獲取這些數據。本文將詳細介紹如何使用 Java 編寫爬蟲,獲取微店商品詳情。 一、準備工作 &…

【Bug】MAUI自定義彈窗在IOS有異常背景

文章目錄 問題問題代碼原因解決處理Bug的具體步驟 問題 自定義彈窗有異常背景 問題代碼 <mct:Popup xmlns"http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x"http://schemas.microsoft.com/winfx/2009/xaml"xmlns:converters"clr-names…

C語言酒店管理系統:完整源碼與深度解析

酒店管理系統通過自動化流程提升酒店運營效率。本系統采用C語言開發&#xff0c;基于模塊化設計思想&#xff0c;包含以下核心功能&#xff1a; ?房間管理?&#xff1a;初始化房間信息、查看房間狀態?預訂管理?&#xff1a;按時間段預訂房間、查詢預訂記錄?入住管理?&am…

基于Gold-YOLO的聚合-分發機制改進YOLOv8教程

1. 引言 本文將詳細介紹如何將Gold-YOLO的核心創新——聚合-分發(Gather-and-Distribute, GD)機制集成到YOLOv8架構中。Gold-YOLO是一種創新的目標檢測架構,通過獨特的信息融合策略實現了低延遲和高準確性的理想平衡。 1.1 Gold-YOLO核心特性 Gold-YOLO的主要創新點包括…

blob 的使用 文件下載 圖片預覽 大文件分片上傳

1. 文件下載 function downloadFile(content, filename, type) {const blob new Blob([content], { type });const url URL.createObjectURL(blob);const a document.createElement(a);a.href url;a.download filename;a.click();URL.revokeObjectURL(url); }// 使用示例…

FlinkCDC-Hudi數據實時入湖原理篇

1.Hudi應用場景 面對海量數據開發場景&#xff0c;一種支持存儲多種原始數據格式、多種計算引擎、高效的元數據統一管理的存儲方式能極大的提高開發效率。所以在選擇技術選型的時候&#xff0c;這種存儲方式有以下幾個特點&#xff1a; 存儲原始數據&#xff0c;這些原始數據來…