面向对象分析与设计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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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采用简单、粗粒度的流量分类机制&…