一.設計模式的基本概念

一.核心概念

對軟件設計中重復出現問題的成熟解決方案,提供代碼可重用性、可維護性和擴展性保障。核心原則包括:

1.1. 單一職責原則?

  • ?定義?:一個類只承擔一個職責,避免因職責過多導致的代碼耦合。

1.2. 開閉原則?

  • ?定義?:應對擴展開放,對修改關閉。
  • ?說明?:允許添加新功能而不破壞現有系統,已有代碼應盡可能保持穩定不修改。

3. 里氏替換原則?

  • ?定義?:子類必須能替換父類且不影響程序正確性
  • ?說明:子類不改變父類原有行為,僅擴展功能。

1.4. 接口隔離原則?

  • ?定義?:類不應依賴不需要的接口,需將龐大接口拆分為多個獨立小接口
  • ?說明?:減少接口污染,避免類因無關方法被迫變更

1.5. 依賴倒置原則?

  • ?定義?:高層模塊不依賴低層模塊,二者應共同依賴抽象
  • ?說明?:通過接口編程解耦。

1.6. 迪米特法則?

  • ?定義?(最少知道原則):對象僅與直接朋友交互,減少與非直接類的依賴。
  • ?說明?:降低耦合,如A調用B,B調用C時,A無需知曉C的存在。

二.分類體系

2.1.創建型

解耦對象創建過程.

?設計模式??解耦手段??適用場景?
?工廠方法模式?子類實現工廠接口,封裝具體對象的實例化過程需動態切換同類型對象(如不同數據庫連接)
?抽象工廠模式?提供接口創建?一組關聯對象?,隔離產品族依賴跨平臺UI組件、多套數據庫適配等場景
?建造者模式?分離復雜對象的?構建步驟?與表示方式構造含多部件的對象(如訂單、配置對象)
?原型模式?通過復制原型實例創建新對象,繞過顯式構造函數創建成本高的對象(如深度克隆配置模板)
?單例模式?全局唯一訪問點,避免重復創建實例資源管理器、配置中心等需全局唯一性的場景

2.2.結構型

處理類/對象間的組合關系(包括組合、聚合和依賴關系)

2.2.1什么是組合關系?

關系類型??生命周期依賴??典型模式應用??案例說明?
?組合關系?
(?Composition?)
?強綁定?:部分對象不能獨立于整體存在
(整體銷毀則部分銷毀)
?組合模式?:文件夾(整體)刪除時,其內部文件(部分)同步銷毀汽車引擎脫離汽車即失去功能意義
?聚合關系?
(?Aggregation?)
?弱綁定?:部分對象可獨立于整體存在?裝飾器模式?:移除咖啡的“牛奶裝飾層”后,原始咖啡對象仍有效5
?享元模式?:棋子對象池獨立于棋局存在
班級解散后,學生仍可作為獨立個體存在
?依賴關系?
(?Dependency?)
?臨時性?:通過參數傳遞臨時使用對象?代理模式?:客戶端通過代理對象間接訪問真實對象(如網絡請求代理)
?適配器模式?:適配器臨時調用被適配對象
支付接口適配器中,僅在使用時臨時依賴舊支付系統對象

2.2.2.結構性設計模式如何處理類/對象間的組合關系?

模式??核心目的??組合關系處理方式??典型應用場景?
?適配器模式?解決接口不兼容問題?對象組合?:適配器類聚合被適配對象,轉換接口邏輯集成舊系統、第三方庫適配
?橋接模式?分離抽象與實現,支持多維擴展?組合抽象與實現?:抽象類聚合實現接口,運行時動態綁定(如形狀+渲染引擎組合)跨平臺UI開發、多數據庫驅動
?組合模式?統一處理樹形結構的部分-整體關系?遞歸組合?:容器節點(Composite)聚合子組件(Component),遞歸調用操作文件系統、組織架構、GUI組件樹
?裝飾器模式?動態添加功能,避免子類爆炸?對象聚合?:裝飾器類聚合原始對象,疊加新行為(如咖啡+牛奶/糖裝飾層)流處理(I/O緩沖)、權限校驗鏈
?外觀模式?簡化復雜子系統的調用?聚合子系統對象?:外觀類組合多個子系統接口,提供統一入口封裝SDK、簡化API調用
?享元模式?減少重復對象創建,節省資源?共享對象池?:享元工廠組合共享對象池,復用相同狀態(如棋盤中的棋子實例)游戲實體管理、文本編輯器字符池
?代理模式?控制對象訪問,增強功能?對象代理?:代理類聚合真實對象,攔截請求(如延遲加載、權限校驗)遠程調用、緩存代理、安全控制

2.3.行為型

優化對象間通信與責任分配

模式??優化重點??典型場景??通信/職責特點?
觀察者模式事件通知機制消息訂閱、GUI事件響應一對多廣播式通信
中介者模式集中協調多對象交互聊天室、飛機調度系統多對一中介調度
職責鏈模式動態選擇處理者審批流程、異常處理鏈請求沿鏈傳遞,職責動態分配
策略模式算法可替換性支付方式、排序算法切換行為抽象,運行時注入
狀態模式狀態驅動行為變更訂單狀態機、游戲角色狀態狀態轉移觸發行為更新
命令模式請求封裝與生命周期管理操作撤銷/重做、任務隊列請求對象化,支持存儲與回溯

💡 如果本文對你有幫助,點擊右上角【訂閱專欄】或左上角關注我  
🔔 完整的23中設計模式干貨,第一時間推送給你!

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

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

相關文章

React第五十七節 Router中RouterProvider使用詳解及注意事項

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一個核心組件&#xff0c;用于提供基于數據路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了傳統的 <BrowserRouter>&#xff0c;支持更強大的數據加載和操作功能&#xff08;如 loader 和…

Opencv中的addweighted函數

一.addweighted函數作用 addweighted&#xff08;&#xff09;是OpenCV庫中用于圖像處理的函數&#xff0c;主要功能是將兩個輸入圖像&#xff08;尺寸和類型相同&#xff09;按照指定的權重進行加權疊加&#xff08;圖像融合&#xff09;&#xff0c;并添加一個標量值&#x…

C++ 基礎特性深度解析

目錄 引言 一、命名空間&#xff08;namespace&#xff09; C 中的命名空間? 與 C 語言的對比? 二、缺省參數? C 中的缺省參數? 與 C 語言的對比? 三、引用&#xff08;reference&#xff09;? C 中的引用? 與 C 語言的對比? 四、inline&#xff08;內聯函數…

關于面試找工作的總結(四)

不同情況下收到offer后的處理方法 1.不會去的,只是面試練手2.還有疑問,考慮中3.offer/職位不滿足期望的4.已確認,但又收到更好的5.還想挽回之前的offer6.確認,準備入職7.還想拖一下的1.不會去的,只是面試練手 HR您好,非常榮幸收到貴司的offer,非常感謝一直以來您的幫助,…

什么是高考?高考的意義是啥?

能見到這個文章的群體&#xff0c;應該都經歷過高考&#xff0c;突然想起“什么是高考&#xff1f;意義何在&#xff1f;” 一、高考的定義與核心功能 **高考&#xff08;普通高等學校招生全國統一考試&#xff09;**是中國教育體系的核心選拔性考試&#xff0c;旨在為高校選拔…

L1和L2核心區別 !!--part 2

哈嘍&#xff0c;我是 我不是小upper~ 昨天&#xff0c;咱們分享了關于 L1 正則化和 L2 正則化核心區別的精彩內容。今天我來進一步補充和拓展。 首先&#xff0c;咱們先來聊聊 L1 和 L2 正則化&#xff0c;方便剛接觸的同學理解。 L1 正則化&#xff08;Lasso&#xff09;&…

字節推出統一多模態模型 BAGEL,GPT-4o 級的圖像生成能力直接開源了!

字節推出的 BAGEL 是一個開源的統一多模態模型&#xff0c;他們直接開源了GPT-4o級別的圖像生成能力。&#xff08;輕松拿捏“萬物皆可吉卜力”玩法~&#xff09;。可以在任何地方對其進行微調、提煉和部署&#xff0c;它以開放的形式提供與 GPT-4o 和 Gemini 2.0 等專有系統相…

互聯網大廠Java面試:從Spring Cloud到Kafka的技術考察

場景&#xff1a;互聯網大廠Java求職者面試 面試官與謝飛機的對話 面試官&#xff1a;我們先從基礎開始&#xff0c;謝飛機&#xff0c;你能簡單介紹一下Java SE和Java EE的區別嗎&#xff1f; 謝飛機&#xff1a;哦&#xff0c;這個簡單。Java SE是標準版&#xff0c;適合桌…

18-Oracle 23ai JSON二元性顛覆傳統

在當今百花齊放的多模型數據庫時代&#xff0c;開發人員常在關系型與文檔型數據庫間艱難取舍。Oracle Database 23ai推出的JSON關系二元性&#xff08;JSON Relational Duality&#xff09;?? 和二元性視圖&#xff08;Duality Views&#xff09;?? 創新性地統一了兩者優勢…

藍橋杯 冶煉金屬

原題目鏈接 &#x1f527; 冶煉金屬轉換率推測題解 &#x1f4dc; 原題描述 小藍有一個神奇的爐子用于將普通金屬 O O O 冶煉成為一種特殊金屬 X X X。這個爐子有一個屬性叫轉換率 V V V&#xff0c;是一個正整數&#xff0c;表示每 V V V 個普通金屬 O O O 可以冶煉出 …

DreamO字節開源圖像編輯框架

DreamO是由字節跳動聯合北京大學深圳研究生院電子與計算機工程學院共同研發的統一圖像定制生成框架&#xff0c;支持多樣化的編輯任務。 看下介紹的核心功能&#xff0c;還是很厲害的&#xff0c;今天咱們來體驗下。 有正常本地部署版的。 https://github.com/bytedance/Drea…

EM儲能網關ZWS智慧儲能云應用(11) — 一級架構主從架構

ZWS智慧儲能云針對儲能場景下不同的架構體系進行了兼容&#xff0c;可以適配用戶面臨的復雜現場環境&#xff0c;滿足更深層次的管理和維護需求。 簡介 儲能系統包含PCS、BMS、EMS等多個組件&#xff0c;不同儲能架構管理和決策方式也有不同。為了適配用戶面臨的復雜現場環境&…

從0開始一篇文章學習Nginx

Nginx服務 HTTP介紹 ## HTTP協議是Hyper Text Transfer Protocol&#xff08;超文本傳輸協議&#xff09;的縮寫,是用于從萬維網&#xff08;WWW:World Wide Web &#xff09;服務器傳輸超文本到本地瀏覽器的傳送協議。 ## HTTP工作在 TCP/IP協議體系中的TCP協議上&#…

Linux應用開發之網絡套接字編程(實例篇)

服務端與客戶端單連接 服務端代碼 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

Python SQLModel 簡介

銷量過萬TEEIS德國護膝夏天用薄款 優惠券冠生園 百花蜂蜜428g 擠壓瓶純蜂蜜巨奇嚴選 鞋子除臭劑360ml 多芬身體磨砂膏280g健70%-75%酒精消毒棉片濕巾1418cm 80片/袋3袋大包清潔食品用消毒 優惠券AIMORNY52朵紅玫瑰永生香皂花同城配送非鮮花七夕情人節生日禮物送女友 熱賣妙潔棉…

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API實戰:導出框架元素數據到Excel 在結構工程師的日常工作中,經常需要從ETABS模型中提取框架元素信息進行后續分析。手動復制粘貼不僅耗時,還容易出錯。今天我們來用簡單的VBA代碼實現自動化導出。 ?? 我們要實現什么? 一鍵點擊,就能將ETABS中所有框架元素的基…

springboot根據部署服務器生成機器碼+加密生成到期時間授權碼設置項目在服務器的到期時間

生成機器碼 首先需要在后端寫個獲取window或linux的機器碼&#xff0c;根據CPU序列號和硬盤序列號(Windows)&#xff0c;拼接得到 /*** 操作系統的工具類*/ public class OSUtils {/*** 獲取window or linux機器碼** return*/public static String getOSNumber() {Map<Str…

Thumb-2指令集及其與STM32的關系

Thumb-2指令集及其與STM32的關系&#xff1a; 1. Thumb-2指令集是什么&#xff1f; 本質&#xff1a;Thumb-2是ARM公司設計的混合指令集架構&#xff0c;首次在ARMv7架構中引入&#xff08;如Cortex-M3/M4/M7&#xff09;。 核心創新&#xff1a; 融合了傳統 32位ARM指令&…

Haption 力反饋遙操作機器人:6 自由度 + 低延遲響應,解鎖精準遠程操控體驗

Haption自2001年成立以來&#xff0c;始終專注于力反饋設備與定制化解決方案的設計、研發及銷售。作為工業級力反饋技術的先行者&#xff0c;其核心產品以高精度交互與可靠性著稱&#xff0c;已與達索系統、空客、Orano 等行業頭部企業達成深度合作&#xff0c;業務覆蓋工程仿真…

C# ExcelWorksheet 貼圖

C# ExcelWorksheet 貼圖 在C#中,如果你想在Excel工作表中插入圖片(例如,在ExcelWorksheet中貼圖),你可以使用ClosedXML或EPPlus這樣的庫來操作Excel文件。下面我將分別介紹如何使用這兩個庫來實現這一功能。 使用ClosedXML 首先,確保你已經安裝了ClosedXML包。你可以通…