二十三種設計模式詳解

二十三種設計模式是軟件開發中用于解決常見問題的經典解決方案,它們由 Erich Gamma 等四位作者在《設計模式:可復用面向對象軟件的基礎》一書中提出。這些模式分為三大類:創建型模式結構型模式行為型模式

1. 創建型模式(Creational Patterns)

這些模式關注對象的創建機制,旨在使系統在創建對象時不依賴于具體的類,從而降低耦合度。

  • 單例模式(Singleton Pattern):確保一個類只有一個實例,并提供全局訪問點。
  • 工廠方法模式(Factory Method Pattern):定義一個創建對象的接口,但由子類決定實例化哪個類。
  • 抽象工廠模式(Abstract Factory Pattern):提供一個創建一系列相關或相互依賴對象的接口,而無需指定具體類。
  • 建造者模式(Builder Pattern):將一個復雜對象的構建過程與其表示分離,使得同樣的構建過程可以創建不同的表示。
  • 原型模式(Prototype Pattern):通過復制現有的實例來創建新對象,而不是通過構造函數。

2. 結構型模式(Structural Patterns)

這些模式關注類和對象的組合,旨在通過繼承和接口實現更好的結構。

  • 適配器模式(Adapter Pattern):將一個類的接口轉換成客戶希望的另一個接口。
  • 橋接模式(Bridge Pattern):將抽象部分與實現部分分離,使它們可以獨立變化。
  • 組合模式(Composite Pattern):將對象組合成樹形結構以表示“部分-整體”的層次結構。
  • 裝飾器模式(Decorator Pattern):動態地給對象添加新的功能。
  • 外觀模式(Facade Pattern):為子系統中的一組接口提供一個統一的接口。
  • 享元模式(Flyweight Pattern):通過共享技術來有效地支持大量細粒度的對象。
  • 代理模式(Proxy Pattern):為其他對象提供一個代理以控制對這個對象的訪問。

3. 行為型模式(Behavioral Patterns)

這些模式關注對象之間的交互和職責分配,旨在使對象之間的通信更加靈活。

  • 責任鏈模式(Chain of Responsibility Pattern):將請求的發送者和接收者解耦,使多個對象都有機會處理請求。
  • 命令模式(Command Pattern):將請求封裝為對象,從而使你可以用不同的請求對客戶進行參數化。
  • 解釋器模式(Interpreter Pattern):定義語言的文法,并解釋該語言中的句子。
  • 迭代器模式(Iterator Pattern):提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內部表示。
  • 中介者模式(Mediator Pattern):用一個中介對象來封裝一系列對象之間的交互。
  • 備忘錄模式(Memento Pattern):在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。
  • 觀察者模式(Observer Pattern):定義對象間的一對多依賴關系,當一個對象改變狀態時,所有依賴它的對象都會收到通知。
  • 狀態模式(State Pattern):允許對象在其內部狀態改變時改變其行為。
  • 策略模式(Strategy Pattern):定義一系列算法,將它們封裝起來,并使它們可以互相替換。
  • 模板方法模式(Template Method Pattern):定義一個操作中的算法的框架,而將一些步驟延遲到子類中。
  • 訪問者模式(Visitor Pattern):表示一個作用于某對象結構中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。

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

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

相關文章

用pyside6創建一個界面并實現一個小功能且能打包成問題記錄

現在我們要開發一個程序,讓用戶輸入一段文本包含:員工姓名、薪資、年齡。該程序可以把薪資在 2萬 以上、以下的人員名單分別打印出來。 1用designer創建界面并生成UI文件; 2直接調用ui文件實現功能; from PySide6.QtWidgets im…

計算機畢業設計 ——jspssm510springboot 的人職匹配推薦系統

作者:程序媛9688 開發技術:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等。 🌟文末獲取源碼數據庫🌟 感興趣的可以先收藏起來,還有大家在畢設選題(免費咨詢指導選題)&#xf…

包子湊數——藍橋杯真題Python

包子湊數 輸入輸出樣例 示例 1 輸入 2 4 5輸出 6樣例說明 湊不出的數目包括:1, 2, 3, 6, 7, 11。 示例 2 輸入 2 4 6輸出 INF樣例說明 所有奇數都湊不出來,所以有無限多個 運行限制 最大運行時間:1s最大運行內存: 256M 最大公約數 最大公…

SSM和SpringBoot有什么區別?

SSM(Spring、Spring MVC、MyBatis)和 Spring Boot 有以下一些區別: 配置方式 SSM:配置相對繁瑣,需要在多個 XML 文件中進行大量的配置。Spring Boot:采用“約定大于配置”的原則,極大地簡化了配…

極簡Python服務器后端

在Python中,可以使用http.server模塊和json模塊來創建一個簡單的HTTP服務器,該服務器可以響應80端口上的/query POST請求,并且請求體為JSON格式。 需要注意,在Linux系統上,使用低于1024的端口(如80端口&…

文檔檢索服務平臺

文檔檢索服務平臺是基于Elasticsearch的全文檢索,包含數據采集、數據清洗、數據轉換、數據檢索等模塊。 項目地址:Github、國內Gitee 演示地址:http://silianpan.cn/gdss/ 以下是演示角色和賬號(密碼同賬號)&#xf…

關于Postman自動獲取token

在使用postman測試聯調接口時,可能每個接口都需要使用此接口生成的令牌做Authorization的Bearer Token驗證,最直接的辦法可能會是一步一步的點擊,如下圖: 在Authorization中去選擇Bearer Token,然后將獲取到的token粘貼…

清華大學DeepSeek文檔下載,清華大學deepseek下載(完成版下載)

文章目錄 前言一、清華大學DeepSeek使用手冊下載二、清華大學DeepSeek使用手冊思維導圖 前言 這是一篇關于清華大學deepseek使用手冊pdf的介紹性文章,主要介紹了DeepSeek的定義、功能、使用方法以及如何通過提示語設計優化AI性能。以下是對這些核心內容的簡要概述&…

Linux:(3)

一:Linux和Linux互傳(壓縮包) scp:Linux scp 命令用于 Linux 之間復制文件和目錄。 scp 是 secure copy 的縮寫, scp 是 linux 系統下基于 ssh 登陸進行安全的遠程文件拷貝命令。 scp 是加密的,rcp 是不加密的,scp 是…

【新人系列】Python 入門專欄合集

? 個人博客:https://blog.csdn.net/Newin2020?typeblog 📝 專欄地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 專欄定位:為 0 基礎剛入門 Python 的小伙伴提供詳細的講解,也歡迎大佬們…

Arcgis 實用制圖技巧--如何制作“陰影”效果

今天給大家介紹arcgis中陰影效果的制作方法,操作很簡單,在ArcMap當中使用制圖表達和移動幾何方式就可以輕松實現。 左側地圖的圖形背景組織很差。右側地圖通過使用陰影效果突出了重點內容。今天,我將要介紹兩種陰影效果的創建方法:第一,純色陰影(single color);第二,漸變…

pandas如何在dataframe上再添加一個dataframe

在pandas中,通常將一個DataFrame與另一個DataFrame進行合并或連接操作,主要有concat函數、merge函數和join方法三種方式,以下是具體介紹: ### 使用concat函數 concat函數可以沿著指定軸將多個DataFrame連接在一起,默認…

YOLOv12 ——基于卷積神經網絡的快速推理速度與注意力機制帶來的增強性能結合

概述 實時目標檢測對于許多實際應用來說已經變得至關重要,而Ultralytics公司開發的YOLO(You Only Look Once,只看一次)系列一直是最先進的模型系列,在速度和準確性之間提供了穩健的平衡。注意力機制的低效阻礙了它們在…

OpenAI開放Deep Research權限,AI智能體大戰升級,DeepSeek與Claude迎來新對決

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

鴻蒙5.0實戰案例:基于RichEditor的評論編輯

往期推文全新看點(文中附帶全新鴻蒙5.0全棧學習筆錄) ?? 鴻蒙(HarmonyOS)北向開發知識點記錄~ ?? 鴻蒙(OpenHarmony)南向開發保姆級知識點匯總~ ?? 鴻蒙應用開發與鴻蒙系統開發哪個更有前景&#…

通過命令啟動steam的游戲

1. 啟動Steam客戶端 在命令行輸入以下命令來啟動Steam客戶端: start steam://open/main 如果Steam未安裝在默認路徑,可能需要先定位到Steam的安裝目錄,例如: cd C:\Program Files (x86)\Steam start steam://open/main 2. 通過…

RIP-AV:使用上下文感知網絡進行視網膜動脈/靜脈分割的聯合代表性實例預訓練

文章目錄 RIP-AV: Joint Representative Instance Pre-training with Context Aware Network for Retinal Artery/Vein Segmentation摘要方法實驗結果 RIP-AV: Joint Representative Instance Pre-training with Context Aware Network for Retinal Artery/Vein Segmentation …

單片機總結【GPIO/TIM/IIC/SPI/UART】

一、GPIO 1、概念 通用輸入輸出口;開發者可以根據自己的需求將其配置為輸入或輸出模式,以實現與外部設備進行數據交互、控制外部設備等功能。簡單來說,GPIO 就像是計算機或微控制器與外部世界溝通的 “橋梁”。 2、工作模式 工作模式性質特…

.gitignore 文件中添加忽略 .pdb 文件

我在項目的根目錄下創建.gitignore文件。打開.gitignore文件并添加忽略.pdb文件的規則。如下: 已經在 .gitignore 文件中添加了忽略 .pdb 文件的規則,但是提交到 Git 倉庫時仍然看到了 .pdb 文件,這通常意味著 .pdb 文件在 .gitignore 文件被…

ubuntu配置jmeter

1.前提準備 系統 ubuntu server 22.04 前提條件:服務器更新apt與安裝lrzsz:更新apt: sudo apt update安裝lrzsz: 命令行下的上傳下載文件工具 sudo apt install lrzszsudo apt install zip2.安裝jemeter 2.1.下載jdk17 輸入命令&#xf…