面向對象分析與設計40講(6)設計原則之開閉原則

文章目錄

    • 一、概念
    • 二、示例(C++ 實現)
      • 1. 違反開閉原則的示例
      • 2. 遵循開閉原則的示例

一、概念

開閉原則(Open-Closed Principle,OCP)是面向對象設計中的重要原則,由 Bertrand Meyer 提出,核心思想可以概括為:對擴展開放,對修改關閉

具體來說,一個軟件實體(如類、模塊、函數等)應當允許在不修改其源代碼的前提下,通過擴展的方式來新增功能。這里的 “開放” 指的是允許擴展,“關閉” 指的是禁止修改原有代碼。

遵循開閉原則的好處在于:

  • 減少修改原有代碼帶來的風險,避免引入新的 bug

  • 提高代碼的可維護性和可擴展性

  • 使系統更加穩定,老功能不會因為新增功能而受到影響

實現開閉原則的關鍵是抽象化,通過定義抽象的接口或基類,讓具體實現類去繼承和擴展,而高層模塊只依賴于抽象,不依賴具體實現。

開閉原則是一種結果,一種指導思想,并非手段,想實現開閉原則,還得借助抽象來實現。
在這里插入圖片描述

二、示例(C++ 實現)

1. 違反開閉原則的示例

假設我們需要實現一個簡單的圖形計算器,計算不同圖形的面積。如果不遵循開閉原則,可能會這樣寫:

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

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

相關文章

[Linux入門] Linux 網絡設置入門:從查看、測試到配置全攻略

目錄 一、查看網絡信息&#xff1a;了解你的網絡狀態 1??核心工具&#xff1a;ip命令&#xff08;替代ifconfig&#xff09; <1> 基本語法&#xff1a; <2> 實用操作示例&#xff1a; 2??查看路由表&#xff1a;route命令 3??查看網絡連接狀態&#xf…

TyFlow:三維領域的粒子特效革命者

在動態模擬與視覺特效領域&#xff0c;??TyFlow?? 作為 3ds Max 中誕生的一款革命性粒子系統插件&#xff08;后來也支持獨立開發&#xff09;&#xff0c;正在徹底改變藝術家們創作復雜動力學效果的方式。它以其無與倫比的靈活性、強大的計算能力和開創性的技術理念&#…

本地一鍵部署 Spark-TTS,支持Mac和Windows

Spark-TTS是一個文本轉語音(TTS)的項目&#xff0c;零樣本語音克隆逼真&#xff0c;多語言支持&#xff0c;語音參數可控。使用魔當(LM Downloader)&#xff0c;可以實現Spark-TTS的本地一鍵部署。 注意 如果使用Windows&#xff0c;推薦用NVIDIA顯卡&#xff0c;生成速度較快…

傳統時間:Date日期類,SimpleDateFormat,Calendar

目錄DateSimpleDateFormatCalendarDate 代表的是日期和時間 常見構造器和方法&#xff1a; 構造器說明public Date()創建一個Date對象&#xff0c;代表的是系統當前此刻日期時間public Date(long time)把時間毫秒值轉換成Date日期對象 常見方法說明public long getTime()返…

linus 環境 tomcat啟動日志分隔

1.定義可執行文件&#xff1a;tomcatlog9090.sh fsize$(ls -l /data/tomcat-cms_9090/logs/catalina.out | cut -d -f 5)if [ $fsize -gt 40960000 ]; thenextdatedate %Y_%m_%d_%k_%Mdatapath/data/tomcat-cms_9090/logscd /data/tomcat-cms_9090/logscp catalina.out catali…

解密 Base64 編碼:從原理到應用的全面解析

在網絡傳輸、數據存儲的世界里&#xff0c;Base64 編碼如同一座隱形的橋梁&#xff0c;默默承擔著重要的角色。當你發送郵件附件、在網頁中嵌入圖片&#xff0c;或是處理一些特殊格式的數據時&#xff0c;都可能在不知不覺中與它打交道。那么&#xff0c;Base64 編碼究竟是什么…

C++實現Adam與RMSProp優化算法

C++中實現Adam和RMSProp優化算法 以下是一些關于C++中實現Adam和RMSProp優化算法的實用示例和資源,涵蓋不同場景和應用。由于篇幅限制,完整代碼,但提供關鍵實現片段、庫使用方法和學習資源。 基礎Adam優化器實現 Adam優化器實現 #include <vector> #include <c…

【物聯網】基于樹莓派的物聯網開發【16】——樹莓派GPIO控制LED燈實驗

場景介紹 掌握GPIO引腳連接雙色LED模塊&#xff0c;編寫Python程序代碼&#xff0c;實現GPIO控制點亮雙色LED燈&#xff01; 窗口查看引腳編號 1、在終端輸入指令&#xff1a;pinout2、使用樹莓派輸入gpio readall命令查看pin狀態 輸入以下命令安裝Git sudo apt install git-co…

低延遲網絡中 gRPC 客戶端的隱藏瓶頸及解決方案

低延遲網絡中 gRPC 客戶端的隱藏瓶頸及解決方案 在分布式系統性能優化領域,有一句名言:"優化非瓶頸環節都是徒勞"(Eliyahu M. Goldratt)。gRPC 作為廣泛使用的高性能服務間通信框架,在特定場景下也會出現容易被忽略的客戶端瓶頸。本文將解析這一問題的本質、復現…

打印機因為網絡問題不能用,接到交換機后解決

之前的問題可參考&#xff1a; 打印機不能用&#xff1a;網絡能ping通&#xff0c;并不表示網絡正常好用_能ping通打印機卻打印錯誤-CSDN博客 今天同事要打印個東西&#xff0c;問我打印機能不能用。我就奇怪了&#xff1a;之前不是好好的嗎&#xff1f;一問&#xff0c;現在…

ubuntu22.04 錄視屏軟件推薦

4. VokoscreenNG功能&#xff1a;VokoscreenNG 是一個多功能的桌面錄屏工具&#xff0c;支持錄制整個屏幕、特定區域、窗口&#xff0c;并可以錄制系統聲音和麥克風。安裝&#xff1a;sudo apt update sudo apt install vokoscreen-ng優點&#xff1a;界面友好&#xff0c;操作…

1、黑馬點評復盤(短信登錄-Session或Redis實現)

短信登錄分別使用session和redis實現 1、基于Session實現登錄 主要功能&#xff1a; 發送驗證碼短信驗證碼登錄、注冊校驗登錄狀態 1.1 實現發送短信驗證碼功能 1.1.1 業務邏輯 用戶在提交手機號后&#xff0c;會校驗手機號是否合法&#xff0c;如果不合法&#xff0c;則要求…

文件管理困境如何破?ZFile+cpolar打造隨身云盤新體驗

文章目錄前言【視頻教程】1.關于ZFile2.本地部署ZFile3.使用ZFile4.ZFile的配置5.cpolar內網穿透工具安裝6.創建遠程連接公網地址7.固定ZFile公網地址前言 每天的數字生活如同在數據海洋中航行&#xff0c;工作文檔、旅行照片、學習資料…這些重要資產是否總讓你感到難以掌控&…

開源數據庫E-R圖繪制工具分享

1. 特點&#xff1a; 可直接使用&#xff0c;無需注冊賬號 無狀態的純前端工具&#xff0c;數據會存放在瀏覽器中。設計完成后可將數據保存到本地 2. 使用場景&#xff1a; 描述E-R圖&#xff0c;對數據庫表關系進行直觀分析 3. 效果&#xff1a; 4. 測試數據 用來測試的建…

安卓 Audio Thread 分析

一、PlaybackThread::threadLoop_write 1.變量 mFramesWritten 類型: int64_t 作用: 記錄從線程啟動以來已寫入音頻設備的幀數&#xff08;不包括掛起狀態下的寫入&#xff09; mSuspendedFrames 類型: int64_t 作用: 記錄線程在掛起&#xff08;suspended&#xff09;狀態下模…

JavaWeb_原始項目初識(一)

Students2025項目&#xff08;一&#xff09; 原始ServletJSP架構項目初步搭建 jsp項目已被淘汰&#xff0c;在此學習目的是了解未來學習的新技術的底層原理項目結構&#xff1a;項目結構介紹&#xff1a; 目前階段只完成了初始化的后端搭建&#xff0c;實現從本地數據庫獲取數…

前端_CSS復習

文章目錄CSS復習1. css三種引入方式1.1 行內樣式常用樣式&#xff1a;1.2頁內樣式常見選擇器&#xff1a;1. 標記選擇器2. id選擇器3. 類選擇器&#xff08;最常用&#xff09;4. 星號選擇器&#xff0c;頻率很低5. 復合選擇器6. 偽類選擇器&#xff1a;7. 子元素偽類1.3引入外…

工業互聯網時代,如何通過混合SD-WAN提升煤炭行業智能化網絡安全

1. 背景&#xff1a;煤炭行業智能化轉型的網絡挑戰隨著工業互聯網技術的普及&#xff0c;煤炭行業智能化轉型進入加速期。選煤廠作為煤炭生產的核心環節&#xff0c;需要構建一套既安全又高效的網絡系統&#xff0c;以滿足工業控制系統&#xff08;ICS&#xff09;、智能設備和…

AI浪潮下數據中心的突圍者:臺達DPH Gen3系列UPS如何重構供電架構

2025年6月13日&#xff0c;臺達-中達電通資通訊基礎設施事業部聯合中國數據中心工作組&#xff08;CDCC&#xff09;在江蘇吳江舉辦"數據中心供配電技術革新與AI算力基礎設施未來展望研討會"&#xff0c;同時開展CDCC專家組工廠參觀。盛會匯聚了數據中心行業專家、互…

DiffServ服務模型與DS碼點詳解

1. DiffServ概述 DiffServ(Differentiated Services&#xff0c;差異化服務)是IETF定義的一種QoS(Quality of Service)體系結構&#xff0c;旨在為IP網絡提供可擴展的服務區分能力。與傳統的IntServ(集成服務)模型不同&#xff0c;DiffServ采用簡單、粗粒度的流量分類機制&…