開發中用到的設計模式

目錄

開發中用到的設計模式

工廠模式

設計理念

好處

體現的編程思想

適配器模式

概念

策略模式和適配器模式的區別

選擇策略模式而非適配器模式的原因

設計模式的開發原則


開發中用到的設計模式

在開發過程中,常見的設計模式會根據不同的業務場景和需求被廣泛使用,以下是一些例子:

  • 單例模式:確保一個類只有一個實例,并提供一個全局訪問點。比如在配置管理類、日志記錄器等場景中,使用單例模式可以避免多個實例造成的資源浪費和數據不一致問題。
  • 工廠模式:將對象的創建和使用分離,通過一個工廠類來創建對象。在需要創建多種不同類型對象的場景中,如創建不同數據庫連接對象時,使用工廠模式可以提高代碼的可維護性和可擴展性。
  • 觀察者模式:定義了一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴它的對象都會得到通知并自動更新。常見于事件處理系統、消息通知系統等。
  • 裝飾器模式:動態地給一個對象添加一些額外的職責。在 Java 的 I/O 流體系中就廣泛使用了裝飾器模式,通過不同的裝飾器類可以為基本的輸入輸出流添加緩沖、加密等功能。

工廠模式

設計理念

工廠模式的核心設計理念是將對象的創建邏輯封裝在一個工廠類中,而不是在客戶端代碼中直接實例化對象。客戶端只需要向工廠類請求所需的對象,而不需要關心對象是如何創建的。這樣可以將對象的創建和使用分離,提高代碼的可維護性和可擴展性。

好處
  • 解耦對象的創建和使用:客戶端代碼只需要使用對象,而不需要關心對象的創建細節,降低了代碼的耦合度。例如,在一個游戲開發中,不同類型的武器有不同的創建邏輯,使用工廠模式可以將武器的創建邏輯封裝在工廠類中,游戲代碼只需要從工廠獲取武器,而不需要了解每種武器的具體創建過程。
  • 提高代碼的可維護性:當對象的創建邏輯發生變化時,只需要修改工廠類的代碼,而不需要修改所有使用該對象的客戶端代碼。比如,如果要修改某個對象的初始化參數,只需要在工廠類中進行修改即可。
  • 便于擴展:當需要添加新的對象類型時,只需要在工廠類中添加相應的創建邏輯,而不需要修改客戶端代碼。例如,在一個圖形繪制系統中,如果要添加一種新的圖形類型,只需要在圖形工廠類中添加創建該圖形的方法。
體現的編程思想

工廠模式體現了面向對象編程中的 “依賴倒置原則” 和 “開閉原則”。依賴倒置原則強調高層模塊不應該依賴低層模塊,兩者都應該依賴抽象。工廠模式通過抽象工廠和具體工廠的設計,使得客戶端代碼依賴于抽象的工廠接口,而不是具體的工廠實現類。開閉原則要求軟件實體(類、模塊、函數等)應該對擴展開放,對修改關閉。工廠模式在添加新的對象類型時,只需要擴展工廠類,而不需要修改已有的客戶端代碼,符合開閉原則。

適配器模式

概念

適配器模式是一種結構型設計模式,它允許將一個類的接口轉換成客戶端所期望的另一個接口。適配器模式可以讓原本不兼容的類能夠一起工作。常見的有類適配器和對象適配器兩種實現方式。例如,在 Java 中,將一個舊的日志記錄類的接口適配成新的日志框架的接口,就可以使用適配器模式。

策略模式和適配器模式的區別
  • 目的不同
    • 策略模式:主要用于定義一系列的算法,并將每個算法封裝起來,使它們可以相互替換。策略模式讓算法的變化獨立于使用算法的客戶端。例如,在一個電商系統中,對于不同的促銷活動(如滿減、折扣、贈品等)可以使用策略模式,將每種促銷算法封裝成一個策略類,客戶端可以根據不同的需求選擇不同的策略。
    • 適配器模式:主要用于解決接口不兼容的問題,使原本不兼容的類能夠協同工作。例如,將一個第三方庫的接口適配成自己系統所需的接口。
  • 使用場景不同
    • 策略模式:適用于需要在運行時動態選擇不同算法的場景,算法的選擇由客戶端決定。
    • 適配器模式:適用于需要復用已有的類,但該類的接口與當前系統不兼容的場景。
選擇策略模式而非適配器模式的原因

如果需求是在多個可互換的算法中進行動態選擇,以滿足不同的業務場景,那么策略模式是更合適的選擇。而適配器模式主要是解決接口不兼容問題,如果沒有接口不兼容的情況,使用策略模式可以更好地實現算法的封裝和替換,提高代碼的靈活性和可維護性。例如,在一個圖像處理系統中,對于不同的圖像壓縮算法(如 JPEG、PNG 等),使用策略模式可以方便地在不同算法之間切換,而不需要考慮接口不兼容的問題。

設計模式的開發原則

設計模式遵循一些基本的開發原則,這些原則有助于提高代碼的可維護性、可擴展性和可復用性,以下是一些常見的原則:

  • 單一職責原則(SRP):一個類應該只有一個引起它變化的原因。也就是說,一個類應該只負責一項職責。例如,一個用戶管理類應該只負責用戶的增刪改查操作,而不應該同時負責用戶的權限驗證和日志記錄等其他職責。
  • 開閉原則(OCP):軟件實體(類、模塊、函數等)應該對擴展開放,對修改關閉。即當需求發生變化時,應該通過擴展代碼來實現,而不是修改已有的代碼。例如,在一個圖形繪制系統中,當需要添加新的圖形類型時,應該通過擴展圖形類和繪制方法來實現,而不是修改已有的圖形繪制代碼。
  • 里氏替換原則(LSP):子類可以替換父類并且不會影響程序的正確性。也就是說,子類應該能夠完全替代父類,并且不會破壞程序的原有功能。例如,在一個動物類層次結構中,子類貓和狗應該能夠替代父類動物,并且不會影響程序的正常運行。
  • 依賴倒置原則(DIP):高層模塊不應該依賴低層模塊,兩者都應該依賴抽象。抽象不應該依賴細節,細節應該依賴抽象。例如,在一個電商系統中,訂單處理模塊(高層模塊)不應該直接依賴具體的數據庫操作類(低層模塊),而是應該依賴一個抽象的數據庫操作接口。
  • 接口隔離原則(ISP):客戶端不應該依賴它不需要的接口。一個類對另一個類的依賴應該建立在最小的接口上。例如,在一個系統中,如果一個客戶端只需要使用某個接口的部分方法,那么應該將這個接口拆分成多個更小的接口,讓客戶端只依賴它需要的接口。
  • 迪米特法則(LoD):一個對象應該對其他對象有最少的了解。也就是說,一個類應該盡量減少與其他類的交互,只與直接的朋友進行通信。例如,在一個社交網絡系統中,一個用戶類應該只與直接相關的好友類、消息類等進行交互,而不應該與其他不相關的類進行過多的交互。

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

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

相關文章

1064 - You have an error in your SQL syntax;

在創建數據庫表建立外鍵是遇到了如下報錯 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near position(position_id) ) at line 8 數據庫表sql如下: --職位表 CR…

無人機 ,遙控器與接收機之前的通信

目錄 1、信號類型 2、工作頻率 3、通信協議 3.1、PPM 協議 3.2、SBUS 協議 3.3、CRSF 協議 無人機的遙控器和接收機之間常用的信號、頻率、協議等相關信息如下: 1、信號類型 模擬信號 特點:信號的幅度、頻率或相位等參數是連續變化的&#xff0c…

【c++】四種類型轉換形式

【c】四種類型轉換形式 編譯時: static_cast(靜態轉換) const_cast(去常性轉換) reinterpret_cast(重新解釋轉換,直接轉換地址) 運行時: dynamic_cast(動態轉換,運行時類…

Cisco ASR1002查看資源占用的幾條命令

查看平臺資源 show platform resource 該命令用于顯示整個平臺的資源使用情況,包括 CPU、內存等 example: ASR1002# show platform resources **State Acronym: H - Healthy, W - Warning, C - Critical Resource…

Day 1:認知革命與DeepSeek生態定位

目標:建立對大模型技術范式的系統性認知,掌握DeepSeek的核心技術特性與生態價值 一、大模型技術演進:從GPT到DeepSeek 1.1 技術發展里程碑 2017-Transformer突破:Self-Attention機制如何突破RNN的序列建模瓶頸 2018-GPT初代&…

Python自動化辦公之Excel拆分

在日常辦公中,我們經常需要將包含多個Sheet頁的Excel文件拆分成多個獨立的Excel文件。例如,在發送Excel表給各部門確認時,出于控制知悉范圍最小等保密性考慮,每個部門只需要查看和確認自己部門對應的Sheet頁。手動拆分Excel文件非…

【CXX-Qt】1.1 Rust中的QObjects

本文涉及到了使用CXX-Qt將Rust、C和QML集成到Qt應用程序中的各個方面。下面,我將提供一個簡單的示例,演示如何使用CXX-Qt來創建一個Rust結構體并將其作為QObject子類暴露給C和QML。 一、設置CXX-Qt環境 首先,確保您已經安裝了Rust、CXX和CX…

Conda命令整理

Conda 是一個功能強大的包和環境管理工具,廣泛用于 Python 開發中。除了基本的包和環境管理功能外,Conda 還提供了許多高級用法和技巧,幫助用戶更高效地管理和維護 Python 環境。 1. 管理 Conda 本身 命令描述示例conda --version查看 Cond…

C++模擬實現AVL樹

目錄 1.文章概括 2.AVL樹概念 3.AVL樹的性質 4.AVL樹的插入 5.旋轉控制 1.左單旋 2. 右單旋 3.左右雙旋 4.右左雙旋 6.全部代碼 1.文章概括 本文適合理解平衡二叉樹的讀者閱讀,因為AVL樹是平衡二叉樹的一種優化,其大部分實現邏輯與平衡二叉樹是…

opc da 服務器數據 轉 EtherCAT項目案例

目錄 1 案例說明 2 VFBOX網關工作原理 3 應用條件 4 查看OPC DA服務器的相關參數 5 配置網關采集opc da數據 6 啟動EtherCAT從站轉發采集的數據 7 在服務器上運行仰科OPC DA采集軟件 8 案例總結 1 案例說明 在OPC DA服務器上運行OPC DA client軟件查看OPC DA服務器的相…

實驗9 基于WebGoat平臺的SQL注入攻擊

實驗9 基于WebGoat平臺的SQL注入攻擊 1.實驗目的 熟悉WebGoat平臺,在該平臺上實現SQL注入攻擊。 2.實驗內容 (1)下載webgoat-server-8.2.2.jar。 (2)搭建java環境。 (3)運行webgoat。 &#xf…

StochSync:可在任意空間中生成360°全景圖和3D網格紋理

StochSync方法可以用于在任意空間中生成圖像,尤其是360全景圖和3D網格紋理。該方法利用了預訓練的圖像擴散模型,以實現零-shot生成,消除了對新數據收集和單獨訓練生成模型的需求。StochSync 結合了 Diffusion Synchronization(DS&…

研發管理知識

定義 研發管理是對研發活動進行有效的計劃、組織、領導和控制的過程,旨在通過合理配置資源、協調團隊工作、監控項目進度和質量等,確保研發項目能夠按時、按質、按量完成,實現企業的技術創新和產品升級目標,增強企業的核心競爭力。…

HarmonyOS 5.0應用開發——全局自定義彈出框openCustomDialog

【高心星出品】 文章目錄 全局自定義彈出框openCustomDialog案例開發步驟完整代碼 全局自定義彈出框openCustomDialog CustomDialog是自定義彈出框,可用于廣告、中獎、警告、軟件更新等與用戶交互響應操作。開發者可以通過CustomDialogController類顯示自定義彈出框…

AOS安裝及操作演示

文章目錄 一、安裝node1.1 在 macOS 上管理 Node版本1.1.1 安裝 nvm1.1.2 驗證 nvm 是否安裝成功1.1.3 使用 nvm 安裝/切換 Node.js 版本1.1.4 卸載 Node.js 版本 1.2 在 windows 上管理 Node版本1.2.1 安裝 nvm-windows1.2.2 安裝 Node.js 版本1.2.3 切換 Node.js 版本1.2.4 卸…

DeepSeek模型R1服務器繁忙,怎么解決?

在當今科技飛速發展的時代,人工智能領域不斷涌現出令人矚目的創新成果,其中DeepSeek模型無疑成為了眾多關注焦點。它憑借著先進的技術和卓越的性能,在行業內掀起了一股熱潮,吸引了無數目光。然而,如同許多前沿技術在發…

AIGC-微頭條爆款文案創作智能體完整指令(DeepSeek,豆包,千問,Kimi,GPT)

Unity3D特效百例案例項目實戰源碼Android-Unity實戰問題匯總游戲腳本-輔助自動化Android控件全解手冊再戰Android系列Scratch編程案例軟考全系列Unity3D學習專欄藍橋系列AIGC(GPT、DeepSeek、豆包、千問、Kimi)??關于作者 專注于Android/Unity和各種游戲開發技巧,以及各種資…

[LLM面試題] 指示微調(Prompt-tuning)與 Prefix-tuning區別

一、提示調整(Prompt Tuning) Prompt Tuning是一種通過改變輸入提示語(input prompt)以獲得更優模型效果的技術。舉個例子,如果我們想將一條英語句子翻譯成德語,可以采用多種不同的方式向模型提問,如下圖所示&#xf…

CSS 性能優化全攻略:提升網站加載速度與流暢度

系列文章目錄 01-從零開始學CSS選擇器:屬性選擇器與偽類選擇器完全指南 02-避免樣式沖突:掌握CSS選擇器優先級與層疊規則的終極指南 03-如何精確掌控網頁布局?深入解析 CSS 樣式與盒模型 04-CSS 布局全面解析:從傳統浮動到現代 F…

自主項目面試點總結

1、許苑–OJ判題系統 技術棧:Spring BootSpring Cloud AlibabaRedisMybatisMQDocker 項目地址: https://github.com/xuyuan-upward/xyoj-backend-microservice 1.1、項目介紹: 一個基于微服務的OJ系統,具備能夠根據管理員預設的題目用例對用戶提交的代…