軟件的常用設計模式。可參考一個一個學習

以下是軟件設計中常見的 **23種經典設計模式**(基于《設計模式:可復用面向對象軟件的基礎》GoF 的經典分類),并結合 **Python 語言特性**的簡要說明和典型應用場景。我將它們分為 **創建型、結構型、行為型** 三大類,供你系統學習:

---

### **一、創建型模式 (Creational Patterns)**
關注對象的創建機制,提高代碼靈活性和可復用性。
1. **單例模式 (Singleton)** ?
? ?- **目的**: 確保一個類只有一個實例,并提供全局訪問點。 ?
? ?- **Python 應用**: 模塊天然單例、元類控制實例化、`__new__` 方法重寫。 ?
? ?- **場景**: 配置管理、數據庫連接池。

2. **工廠方法模式 (Factory Method)** ?
? ?- **目的**: 定義一個創建對象的接口,由子類決定實例化哪個類。 ?
? ?- **Python 應用**: 類方法作為工廠函數,返回不同子類對象。 ?
? ?- **場景**: 動態創建不同數據格式的解析器。

3. **抽象工廠模式 (Abstract Factory)** ?
? ?- **目的**: 創建一系列相關或依賴對象的家族,而無需指定具體類。 ?
? ?- **Python 應用**: 通過工廠類組合多個工廠方法。 ?
? ?- **場景**: GUI 庫跨平臺組件(按鈕、文本框)。

4. **建造者模式 (Builder)** ?
? ?- **目的**: 將復雜對象的構建與其表示分離,分步驟構造對象。 ?
? ?- **Python 應用**: 鏈式調用配置對象屬性。 ?
? ?- **場景**: 構造復雜查詢語句、HTTP 請求生成。

5. **原型模式 (Prototype)** ?
? ?- **目的**: 通過復制現有對象來創建新對象,避免重復初始化。 ?
? ?- **Python 應用**: `copy` 模塊(`deepcopy` 實現深拷貝)。 ?
? ?- **場景**: 游戲中的敵人克隆、配置模板復制。

---

### **二、結構型模式 (Structural Patterns)**
處理類或對象的組合,形成更大的結構。
6. **適配器模式 (Adapter)** ?
? ?- **目的**: 將不兼容接口轉換為客戶端期望的接口。 ?
? ?- **Python 應用**: 類適配器(多繼承)、對象適配器(組合)。 ?
? ?- **場景**: 集成第三方庫的舊接口。

7. **橋接模式 (Bridge)** ?
? ?- **目的**: 將抽象部分與其實現部分分離,使二者獨立變化。 ?
? ?- **Python 應用**: 抽象類與實現類解耦。 ?
? ?- **場景**: 不同圖形渲染引擎的切換。

8. **組合模式 (Composite)** ?
? ?- **目的**: 以樹形結構組合對象,統一處理單個對象和組合對象。 ?
? ?- **Python 應用**: 遞歸處理文件系統目錄結構。 ?
? ?- **場景**: 菜單嵌套子菜單、UI 組件樹。

9. **裝飾器模式 (Decorator)** ?
? ?- **目的**: 動態地為對象添加額外職責,比繼承更靈活。 ?
? ?- **Python 應用**: `@decorator` 語法糖,函數包裝器。 ?
? ?- **場景**: 日志記錄、權限校驗、緩存增強。

10. **外觀模式 (Facade)** ?
? ? - **目的**: 提供統一的接口簡化子系統復雜性。 ?
? ? - **Python 應用**: 封裝底層模塊調用流程。 ?
? ? - **場景**: API 網關、數據庫遷移工具。

11. **享元模式 (Flyweight)** ?
? ? - **目的**: 共享大量細粒度對象,減少內存消耗。 ?
? ? - **Python 應用**: 緩存常用對象(如字符、圖標)。 ?
? ? - **場景**: 文本編輯器中的字符渲染、游戲中的粒子系統。

12. **代理模式 (Proxy)** ?
? ? - **目的**: 為其他對象提供代理以控制對其訪問。 ?
? ? - **Python 應用**: 延遲加載(Lazy Loading)、權限控制。 ?
? ? - **場景**: 圖片懶加載、ORM 中的延遲查詢。

---

### **三、行為型模式 (Behavioral Patterns)**
關注對象間的通信和職責分配。
13. **責任鏈模式 (Chain of Responsibility)** ?
? ? - **目的**: 將請求的發送者和接收者解耦,使多個對象都有機會處理請求。 ?
? ? - **Python 應用**: 鏈表式處理器傳遞請求。 ?
? ? - **場景**: HTTP 中間件、異常處理鏈。

14. **命令模式 (Command)** ?
? ? - **目的**: 將請求封裝為對象,支持請求的排隊、日志、撤銷。 ?
? ? - **Python 應用**: 封裝函數為可調用對象。 ?
? ? - **場景**: 任務隊列、GUI 按鈕操作。

15. **解釋器模式 (Interpreter)** ?
? ? - **目的**: 定義語言的語法,并解釋執行語句。 ?
? ? - **Python 應用**: 實現 DSL(領域特定語言)。 ?
? ? - **場景**: 正則表達式引擎、SQL 解析。

16. **迭代器模式 (Iterator)** ?
? ? - **目的**: 提供一種方法順序訪問聚合對象的元素,而無需暴露內部結構。 ?
? ? - **Python 應用**: `__iter__` 和 `__next__` 方法實現迭代協議。 ?
? ? - **場景**: 遍歷自定義集合、分頁查詢。

17. **中介者模式 (Mediator)** ?
? ? - **目的**: 定義一個中介對象封裝對象間的交互,降低耦合度。 ?
? ? - **Python 應用**: 聊天室協調多個用戶通信。 ?
? ? - **場景**: 事件總線、UI 組件通信。

18. **備忘錄模式 (Memento)** ?
? ? - **目的**: 在不破壞封裝的前提下,捕獲并保存對象狀態以便恢復。 ?
? ? - **Python 應用**: 序列化對象狀態(`pickle`)。 ?
? ? - **場景**: 撤銷操作、游戲存檔。

19. **觀察者模式 (Observer)** ?
? ? - **目的**: 定義對象間的一對多依賴關系,當對象狀態變化時自動通知依賴項。 ?
? ? - **Python 應用**: Django Signals、事件監聽。 ?
? ? - **場景**: 實時數據監控、發布訂閱系統。

20. **狀態模式 (State)** ?
? ? - **目的**: 允許對象在其內部狀態改變時改變行為。 ?
? ? - **Python 應用**: 狀態機實現,上下文類委托狀態對象。 ?
? ? - **場景**: 訂單狀態流轉、游戲角色行為切換。

21. **策略模式 (Strategy)** ?
? ? - **目的**: 定義一系列算法,封裝每個算法并使它們可互換。 ?
? ? - **Python 應用**: 函數作為一等公民傳遞策略。 ?
? ? - **場景**: 排序算法選擇、支付方式切換。

22. **模板方法模式 (Template Method)** ?
? ? - **目的**: 定義算法的骨架,將某些步驟延遲到子類實現。 ?
? ? - **Python 應用**: 抽象基類(`abc` 模塊)定義模板方法。 ?
? ? - **場景**: 數據處理的標準化流程(如 ETL)。

23. **訪問者模式 (Visitor)** ?
? ? - **目的**: 在不修改類的前提下為類添加新操作。 ?
? ? - **Python 應用**: 雙重分派(`@singledispatch`)。 ?
? ? - **場景**: 語法樹分析、報表生成。

---

### **其他常用模式 (補充)**
- **依賴注入 (Dependency Injection)**: 通過外部傳遞依賴對象(如 Flask 的上下文管理)。
- **對象池模式 (Object Pool)**: 復用昂貴資源(如數據庫連接池)。
- **規格模式 (Specification)**: 組合業務規則(如查詢過濾器)。

---

### **學習建議**
1. **按分類循序漸進**:先掌握創建型,再結構型,最后行為型。
2. **結合 Python 特性**:理解 Python 的動態性和簡潔語法如何簡化模式實現。
3. **實踐項目驅動**:嘗試在框架(如 Django、Flask)或開源代碼中尋找模式應用。
4. **對比模式差異**:例如區分「策略模式」與「狀態模式」、「代理模式」與「裝飾器模式」。

如果需要更詳細的某個模式的代碼示例或深入解析,請告訴我,我可以為你展開說明!

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

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

相關文章

性能比拼: Go(Gin) vs Python(Flask)

本內容是對知名性能評測博主 Anton Putra Go (Golang) vs Python Performance Benchmark (Kubernetes - OpenTelemetry - Prometheus - S3/Postgres) 內容的翻譯與整理, 有適當刪減, 相關指標和結論以原作為準 在本視頻中,我們將比較 Golang 和 Python 的性能。 但…

Android版本更新服務通知下載實現

在日常開發中,我們肯定會有檢查版本更新的需求,那我版本更新的輪子網上也是有的,想自己實現一下代碼如下: 下載管理類: public class DownLoadManager {private static final String MAIN "main"; //Tagp…

UE5學習筆記 FPS游戲制作33 換子彈 動畫事件

新建動畫蒙太奇 為Rifle和Launcher各自新建一個動畫蒙太奇,拖入動畫,注意動畫的軌道要和動畫藍圖里的一致 在蒙太奇添加動畫事件 在通知一欄新增一個軌道,右鍵軌道,新增一個 換槍完成 通知,不同動畫的同名通知需要…

uniapp中uploadFile的用法

基本語法 uni.uploadFile(OBJECT)OBJECT 是一個包含上傳相關配置的對象,常見參數如下: 參數類型必填說明urlString是開發者服務器地址。filePathString是要上傳文件資源的本地路徑。nameString是文件對應的 key,開發者在服務端可以通過這個 …

Android設計模式之責任鏈模式

一、定義: 使多個對象都有機會處理請求,從而避免了請求的發送者和接收者之間的耦合關系將這些對象連城一條鏈,并沿著這條鏈傳遞該請求,只到有對象處理它為止。 二、模式結構: 抽象處理者(Handler&#xff…

Oracle數據庫數據編程SQL<3.3 PL/SQL 游標>

游標(Cursor)是Oracle數據庫中用于處理查詢結果集的重要機制,它允許開發者逐行處理SQL語句返回的數據。 目錄 一、游標基本概念 1. 游標定義 2. 游標分類 二、靜態游標 (一)顯式游標 【一】不帶參數,普通的顯示游標 1. 顯式…

逗萬DareWorks|創意重構書寫美學,引領新潮無界的文創革命

當傳統文具陷入同質化泥潭時,逗萬DareWorks品牌猶如一顆璀璨的明星,以其獨特的創意理念和卓越的產品品質,迅速贏得了廣大消費者的青睞。 逗萬DareWorks隸屬于東莞司貿文教贈品有限公司,后者深耕制筆行業45年,占地4.6萬…

寫Prompt的技巧和基本原則

一.基本原則 1.一定要描述清晰你需要大模型做的事情,不要模棱兩可 2.告訴大模型需要它做什么,不需要做什么 改寫前: 請幫我推薦一些電影 改寫后: 請幫我推薦2025年新出的10部評分比較高的喜劇電影,不要問我個人喜好等其他問題&#xff…

【React】基于 React+Tailwind 的 EmojiPicker 選擇器組件

1.背景 React 寫一個 EmojiPicker 組件,基于 emoji-mart 組件二次封裝。支持添加自定義背景 、Emoji 圖標選擇!并在頁面上展示! 2.技術棧 emoji-mart/data 、emoji-mart : emoji 圖標庫、元數據 tailwindcss: 原子化 CSS 樣式庫 antd : 組…

Qt中繪制不規則控件

在Qt中繪制不規則控件可通過設置遮罩(Mask)實現。以下是詳細步驟: ?繼承目標控件?:如QPushButton或QWidget。?重寫resizeEvent?:當控件大小變化時,更新遮罩形狀。?創建遮罩區域?:使用QRegion或QPain…

Parallel_Scheduling_of_DAGs_under_Memory_Constraints論文閱讀

內存約束下的 DAG 并行調度 點擊閱讀原文語雀鏈接更清晰 摘要 科學工作流通常被建模為任務的有向無環圖(DAG),這些任務代表計算模塊及其依賴關系,依賴關系表現為任務生成的數據被其他任務使用。這種形式化方法允許使用運行時系統&…

探索MVC、MVP、MVVM和DDD架構在不同編程語言中的實現差異

MVC與MVP/MVVM/DDD架構對比,不同語言實現 MVC 分層架構設計概述 模型-視圖-控制器(Model-View-Controller,簡稱 MVC)是一種經典軟件架構設計,通過分層解耦,使得系統結構清晰和易于維護,具有良…

一文讀懂 UML:基礎概念與體系框架

UML 圖是一種標準化的建模語言,在軟件開發和系統設計等領域有著廣泛的應用。以下是對 UML 圖各類圖的詳細介紹: 1.用例圖 定義:用例圖是從用戶角度描述系統功能的模型圖,展現了系統的參與者與用例之間的關系。作用:幫…

Spring 及 Spring Boot 條件化注解(15個)完整列表及示例

Spring 及 Spring Boot 條件化注解完整列表及示例 1. 所有條件化注解列表 Spring 和 Spring Boot 提供了以下條件化注解(共 15 個),用于在配置類或方法上實現條件化注冊 Bean 或配置: 注解名稱作用來源框架Conditional自定義條件…

【Kafka】深入探討 Kafka 如何保證一致性

文章目錄 Kafka 基本概念回顧?副本角色? 數據寫入一致性?同步副本(ISR)集合?數據讀取一致性?故障處理與一致性恢復?總結? 在分布式系統領域,數據一致性是至關重要的一環。作為一款高性能的分布式消息隊列系統,Kafka 在設計…

從入門到精通:SQL注入防御與攻防實戰——紅隊如何突破,藍隊如何應對!

引言:為什么SQL注入攻擊依然如此強大? SQL注入(SQL Injection)是最古老且最常見的Web應用漏洞之一。盡管很多公司和組織都已經采取了WAF、防火墻、數據庫隔離等防護措施,但SQL注入依然在許多情況下能夠突破防線&#…

【算法day27】有效的數獨——請你判斷一個 9 x 9 的數獨是否有效。只需要 根據以下規則 ,驗證已經填入的數字是否有效即可。

36. 有效的數獨 請你判斷一個 9 x 9 的數獨是否有效。只需要 根據以下規則 ,驗證已經填入的數字是否有效即可。 數字 1-9 在每一行只能出現一次。 數字 1-9 在每一列只能出現一次。 數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。(請參考示例…

leetcode 2360. 圖中的最長環 困難

給你一個 n 個節點的 有向圖 ,節點編號為 0 到 n - 1 ,其中每個節點 至多 有一條出邊。 圖用一個大小為 n 下標從 0 開始的數組 edges 表示,節點 i 到節點 edges[i] 之間有一條有向邊。如果節點 i 沒有出邊,那么 edges[i] -1 。…

PySpur: AI 智能體可視化開發平臺

GitHub:https://github.com/PySpur-Dev/pyspur 更多AI開源軟件:發現分享好用的AI工具、AI開源軟件、AI模型、AI變現 - 小眾AI PySpur是一個開源的輕量級可視化AI智能體工作流構建器,旨在簡化AI系統的開發流程。通過拖拽式界面,用戶…

vcpkg安裝及使用教程,以安裝matio庫解析mat文件為例

vcpkg安裝及使用教程,以安裝matio庫解析mat文件為例 1. vcpkg安裝2 安裝matio三方庫3 將三方庫集成到VS中3.1 全局集成3.2 集成到特定工程4 結語Vcpkg 是微軟開發的一款開源的 C/C++ 包管理工具,旨在簡化 C/C++ 項目依賴庫的安裝和管理。它支持跨平臺(Windows、Linux、macO…