91、23種設計模式

設計模式是軟件設計中反復出現的解決方案的模板,用于解決特定問題并提高代碼的可維護性、可擴展性和可復用性。23種經典設計模式可分為創建型、結構型和行為型三大類,以下是具體分類及模式概述:

一、創建型模式(5種)

關注對象的創建過程,解耦對象的實例化與使用,提高靈活性。

1.單例模式

  • 定義:確保一個類只有一個實例,并提供全局訪問點。
  • 應用場景:配置管理、線程池、數據庫連接池等。
  • 實現方式:餓漢式、懶漢式、雙重檢查鎖、靜態內部類等。

2.抽象工廠模式

  • 定義:創建一系列相關或依賴對象的家族,無需指定具體類。
  • 應用場景:跨平臺UI組件庫、數據庫訪問層等。
  • 優點:隔離具體類的生成,客戶端與具體產品解耦。

3.工廠方法模式

  • 定義:定義一個創建對象的接口,由子類決定實例化哪個類。
  • 應用場景:JDBC連接數據庫、日志記錄器等。
  • 優點:符合開閉原則,新增產品無需修改原有代碼。

4.建造者模式

  • 定義:分步驟構建復雜對象,允許相同的構建過程創建不同表示。
  • 應用場景:SQL構建器、JSON解析器等。
  • 優點:封裝構建邏輯,便于擴展和復用。

5.原型模式

  • 定義:通過復制現有對象創建新對象,避免重復初始化。
  • 應用場景:對象創建成本高(如數據庫連接)、緩存系統等。
  • 實現方式:淺拷貝(Object.clone())或深拷貝(序列化/反序列化)。

二、結構型模式(7種)

關注類或對象的組合,形成更大的結構,提高靈活性和可擴展性。

1.橋接模式

  • 定義:將抽象部分與實現部分分離,使它們可以獨立變化。
  • 應用場景:跨平臺圖表庫、驅動框架等。
  • 優點:避免繼承導致的類爆炸,提高擴展性。

2.代理模式

  • 定義:為其他對象提供代理以控制訪問。
  • 應用場景:RPC調用、AOP編程等。
  • 類型:靜態代理、動態代理(JDK/CGLIB)。

3.組合模式

  • 定義:將對象組合成樹形結構,表示“部分-整體”層次。
  • 應用場景:文件系統、GUI組件樹等。
  • 優點:統一處理單個對象和組合對象。

4.適配器模式

  • 定義:將不兼容的接口轉換為客戶端期望的接口。
  • 應用場景:舊系統改造、第三方庫集成等。
  • 類型:類適配器(繼承)、對象適配器(組合)。

5.享元模式

  • 定義:共享大量細粒度對象,減少內存占用。
  • 應用場景:字符串常量池、線程池等。
  • 核心:區分內部狀態(共享)和外部狀態(獨立)。

6.裝飾器模式

  • 定義:動態添加職責到對象,比繼承更靈活。
  • 應用場景:Java I/O流、日志裝飾器等。
  • 優點:避免子類膨脹,功能擴展開放。

7.外觀模式

  • 定義:為復雜子系統提供簡化接口。
  • 應用場景:分布式系統、家庭影院控制等。
  • 優點:降低客戶端與子系統的耦合度。

三、行為型模式(11種)

關注對象間的通信和職責分配,提高靈活性和可維護性。

1.訪問者模式

  • 定義:將操作作用于對象結構中的元素,支持新操作擴展。
  • 應用場景:編譯器語法樹分析、XML解析等。
  • 缺點:增加對象結構時需修改所有訪問者。

2.策略模式

  • 定義:定義算法族,封裝并使其可互換。
  • 應用場景:排序算法、支付方式選擇等。
  • 優點:避免條件語句,便于擴展新算法。

3.備忘錄模式

  • 定義:捕獲并保存對象狀態,以便后續恢復。
  • 應用場景:游戲存檔、文本編輯器撤銷操作等。
  • 核心:備忘錄對象(存儲狀態)、原發器(被保存對象)、管理者(管理備忘錄)。

4.觀察者模式

  • 定義:定義一對多依賴,主題狀態變化時通知觀察者。
  • 應用場景:事件處理、消息訂閱等。
  • 實現方式:Java中的Observer接口或自定義事件總線。

5.模板方法模式

  • 定義:定義算法骨架,將步驟延遲到子類實現。
  • 應用場景:框架設計、單元測試框架等。
  • 核心:抽象類定義模板方法,子類實現具體步驟。

6.迭代器模式

  • 定義:提供順序訪問聚合對象元素的方法,不暴露內部結構。
  • 應用場景:集合遍歷、樹形結構遍歷等。
  • 優點:統一訪問接口,支持不同遍歷方式。

7.狀態模式

  • 定義:允許對象在內部狀態改變時改變行為。
  • 應用場景:訂單狀態機、游戲角色狀態等。
  • 優點:避免大量條件語句,符合開閉原則。

8.命令模式

  • 定義:將請求封裝為對象,支持參數化、隊列和日志。
  • 應用場景:事務管理、撤銷操作等。
  • 優點:將操作與接收者解耦。

9.中介者模式

  • 定義:用中介對象封裝對象間交互,減少耦合。
  • 應用場景:聊天室、GUI組件交互等。
  • 優點:避免對象間直接引用,降低復雜度。

10.解釋器模式

  • 定義:定義語言的文法表示,并解釋執行。
  • 應用場景:SQL解析、正則表達式等。
  • 缺點:復雜語言解析效率低。

11.責任鏈模式

  • 定義:將請求沿處理鏈傳遞,直到有對象處理它。
  • 應用場景:Web請求處理、審批流程等。
  • 優點:解耦請求發送者和接收者。

速記口訣

  • 單抽工建原。
  • 橋代理組裝適配器,享元回家裝飾外觀。
  • 訪問者寫好策略備忘錄,觀察模板迭代的狀態,命令中介解釋責任鏈。

在這里插入圖片描述

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

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

相關文章

力扣(串聯所有單詞的子串)

串聯所有單詞的子串問題:多滑動窗口與哈希表的實戰應用。 一、題目分析(一)問題定義 給定字符串 s 和字符串數組 words(words 中所有單詞長度相同 ),找出 s 中所有“串聯子串”的起始索引。串聯子串指包含 …

RH134 管理基本存儲知識點

1. 對 Linux 磁盤進行分區時有哪兩種方案?分別加以詳細說明。答:MBR分區:主引導記錄(MBR)分區方案是運行BIOS固件的系統上的標準方案。此方案支持最 多四個主分區。在Linux系統上,您可以使用擴展分區和邏輯分區來創建最多…

【JS 異步】告別回調地獄:Async/Await 和 Promise 的優雅實踐與錯誤處理

【JS 異步】告別回調地獄:Async/Await 和 Promise 的優雅實踐與錯誤處理 所屬專欄: 《前端小技巧集合:讓你的代碼更優雅高效 上一篇: 【JS 數組】數組操作的“瑞士軍刀”:精通 Array.reduce() 的騷操作 作者&#xff…

23.Linux : ftp服務及配置詳解

Linux : ftp服務及配置詳解 FTP 基本概念 定義:文件傳輸協議(File Transfer Protocol),采用 C/S 模式工作。端口: 控制端口:21數據端口:20FTP 工作原理模式工作流程連接發起方主動模…

悲觀鎖樂觀鎖與事務注解在項目實戰中的應用場景及詳細解析

在今天做的項目練習部分中真的學到了很多東西,也補充了許多之前遺漏或是忘記的知識點,但時間精力有限,我就先記錄一下今天用到的一個新東西,悲觀鎖和樂觀鎖。首先給出實際應用背景:在加入鎖和事務注解之前,…

Java構造器與工廠模式(靜態工程方法)詳解

1. 構造器1.1 構造器的核心意義1.1.1 對象初始化構造器在創建對象 (new) 時自動調用, 用于初始化對象的狀態 (如設置字段初始值, 分配資源等)無構造器時: 字段為默認值(0/null/false)有構造器:確保對象創建后即處于有效狀態1.1.2 強制初始化…

解決jdk初始化運行,防火墻通信選錯專業網絡問題

問題描述新項目添加不同版本的jdk,運行時提示防火墻通信策略,選成專用網絡。其他人訪問后端接口時,提示連接失敗。 解決方案:1、在搜索欄中輸入 防火墻關鍵字,選擇到防火墻和網絡保護2、選擇允許應用通過防火墻3、先點…

【Linux】常用命令(三)

【Linux】常用命令(三)1. export1.1 原理1.2 常用語法1.3 示例1.4 書中對命令的解釋1.5 生效范圍2. 測試服務地址與其端口能否訪問2.1 nc(Netcat)命令2.2 telnet2.3 nmap2.4 curl命令 (適用于HTTP/HTTPS 服務)1. export export 是 Linux Shell&#xff…

Pytest項目_day15(yaml)

YAMLYAML是一個對所有編程語言都很友好的數據序列化標準,它是一種直觀的能夠被電腦識別的數據序列化格式,是一種可讀性高且容易被人類閱讀的腳本語言YAML語言的本質是一種通用的數據串行化格式適用場景 可以直接序列化為數組、字典解析成本低專門寫配置文…

審批流程系統設計與實現:狀態驅動、靈活擴展的企業級解決方案

審批流程系統設計與實現:狀態驅動、靈活擴展的企業級解決方案 本文基于實際企業級審批系統源碼,深入解析如何設計高擴展性、強一致性的審批流程引擎,涵蓋狀態機設計、多租戶隔離、文件服務集成等核心實現。 1. 系統設計概覽 審批系統的核心架…

汽車免拆診斷案例 | 2010款奧迪A4L車行駛中發動機偶爾自動熄火

故障現象 一輛2010款奧迪A4L車,搭載CDZ發動機 ,累計行駛里程約為18.2萬km。該車行駛中發動機偶爾自動熄火,有時熄火后能夠立即重新起動著機,有時需要等待一會兒才能重新起動著機,故障頻率較低。因該故障在其他維修廠陸…

Liam ERD:自動生成美觀的交互式實體關系圖

Liam ERD 是一個可以快速生成美觀且具有交互性的數據庫實體關系圖(ERD)的工具,可以幫助用戶實現復雜數據庫結構的可視化。 Liam ERD 是一個免費開源的項目,代碼托管在 GitHub: https://github.com/liam-hq/liam 功能…

網絡協議序列化工具Protobuf

目錄前言一、下載注意二、解壓安裝三、Protobuf的使用1、創建.proto文件2、利用protoc編譯.proto文件前言 Protocol Buffers是Google的?種語??關、平臺?關、可擴展的序列化結構數據的?法,它可?于(數據)通信協議、數據存儲等。 Protoco…

從表單校驗到API網關:全鏈路輸入安全防護指南

從表單校驗到 API 網關:全鏈路輸入安全防護指南 在軟件系統的安全防御體系中,輸入安全是第一道防線,而這道防線的堅固程度直接決定了系統抵御外部攻擊的能力。從用戶在瀏覽器中填寫表單的那一刻起,到數據經過 API 網關流轉至后端服務,每一個環節都可能成為輸入攻擊的突破…

Flask vs Django:微框架與一站式對決

Flask 簡介 1、簡介 Flask誕生于2010年,是Armin ronacher用Python語言基于Werkzeug工具箱編寫的輕量級Web開發框架,又稱之為微框架。 "微"的含義:Flask旨在保持核心簡潔,本身相當于內核,其他功能需通過擴展…

真實業務場景:mysql慢查詢優化(從17秒的查詢優化到700毫秒)

慢查詢業務場景:原先在我們系統中要統計一些人員的單位 部門信息的數據情況,比如總的男女人數,每個單位下的男女人數等等,然后原來的sql是這樣寫的 根據一個單位的id 然后對一張表做出多個子查詢進行查詢,這時候統計記錄 由于加載…

遠程影音訪問:通過 cpolar 內網穿透服務使用 LibreTV

文章目錄前言【視頻教程】1.關于LibreTV2.docker部署LibreTV3.簡單使用LibreTV4.安裝cpolar內網穿透5.配置ward公網地址6.配置固定公網地址總結LibreTV 與 cpolar 的協同應用,為用戶打造了一條通往高清觀影自由的便捷之路。通過這一方案,用戶不僅擺脫了商…

Apache ECharts 6 核心技術解密 – Vue3企業級可視化實戰指南

簡介 ECharts 是百度開源的一個使用 JavaScript 實現的開源可視化庫,它能夠生動、可交互地展示數據。在 Vue3 項目中集成 ECharts 可以讓你的項目更加直觀和動態地呈現數據信息。 核心優勢 特性SVG渲染器Canvas渲染器縮放保真度★★★★★★★☆☆☆動態交互性能…

考公VS考研,拼哪個性價比高?

即將到來下半年,將迎來考公和考研是兩個非常重要的考試,也是許多年輕人為之奮斗的目標。無論是獲得一份穩定的“鐵飯碗”,還是提升學歷學位獲得更高的競爭力,都是值得努力的方向。那么,考公vs考研,到底哪個…

python2操作neo4j

環境依賴 jdk、neo4j圖數據庫 操作一條數據完整demo import os,json,sys,io from py2neo import Graph,Nodetry:sys.stdout io.TextIOWrapper(sys.stdout.buffer, encodingutf-8)sys.stderr io.TextIOWrapper(sys.stderr.buffer, encodingutf-8) except Exception:passcla…