C++创建型设计模式体现出的面向对象设计原则

C++创建型设计模式(如单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式)在实现过程中体现了许多软件设计原则,尤其是SOLID原则和KISS原则。这些模式的设计和应用有助于编写灵活、可维护和可扩展的代码。以下是每个模式如何体现这些原则的详细阐述:

1. 单例模式(Singleton Pattern)

体现的原则

  • 单一职责原则(SRP):单例模式确保一个类只有一个实例,并提供一个全局访问点。这使得类的职责非常明确,即仅负责管理自己的唯一实例。
  • 开闭原则(OCP):单例模式本身非常简单且闭合,不需要扩展。如果需要扩展,可以通过组合或继承来实现。

理由

  • 单例模式的目的是保证全局唯一性,这使得它不会因为类的职责过多而导致代码复杂化。
  • 由于单例模式的职责单一,新增功能时不会影响现有代码,符合开闭原则。

2. 工厂方法模式(Factory Method Pattern)

体现的原则

  • 单一职责原则(SRP):工厂方法模式将对象的创建逻辑从主逻辑中分离出来,每个工厂仅负责创建一种类型的对象。
  • 开闭原则(OCP):通过工厂方法模式,可以在不修改现有代码的情况下,通过派生新的工厂类来创建新的对象类型。
  • 依赖倒置原则(DIP):客户端依赖于抽象工厂和抽象产品,而不是具体实现,这符合依赖倒置原则。

理由

  • 分离创建逻辑和使用逻辑,使得每个类的职责更加明确。
  • 新增产品类型时,只需添加新的工厂类,而不需要修改现有代码,符合开闭原则。
  • 通过依赖抽象而不是具体实现,降低了代码之间的耦合度。

3. 抽象工厂模式(Abstract Factory Pattern)

体现的原则

  • 单一职责原则(SRP):抽象工厂模式将一组相关对象的创建逻辑分离出来,使得每个工厂仅负责创建一组相关对象。
  • 开闭原则(OCP):扩展新的产品族时,只需添加新的工厂类,而不需要修改现有代码。
  • 依赖倒置原则(DIP):客户端依赖于抽象工厂和抽象产品接口,而不是具体实现。

理由

  • 每个工厂仅负责一组相关对象的创建,职责单一。
  • 新增产品族时,只需添加新的工厂类,符合开闭原则。
  • 通过依赖抽象而不是具体实现,降低了代码之间的耦合度。

4. 建造者模式(Builder Pattern)

体现的原则

  • 单一职责原则(SRP):建造者模式将复杂对象的构造过程分离出来,每个建造者仅负责对象的一个部分的构建。
  • 开闭原则(OCP):通过不同的建造者,可以在不修改现有代码的情况下,创建具有不同表示的对象。
  • 接口隔离原则(ISP):建造者模式通过抽象接口定义构建步骤,使得客户端不需要了解复杂的构建逻辑。

理由

  • 将复杂对象的构建过程分解为多个步骤,每个步骤由专门的建造者负责,符合单一职责原则。
  • 新增建造者时,只需实现新的建造者类,而不需要修改现有代码,符合开闭原则。
  • 客户端通过抽象建造者接口与建造者交互,不需要了解具体构建细节,符合接口隔离原则。

5. 原型模式(Prototype Pattern)

体现的原则

  • 单一职责原则(SRP):原型模式将对象的克隆逻辑封装在一个单独的类中,使得类的职责更加明确。
  • 开闭原则(OCP):通过原型模式,可以在不修改现有代码的情况下,通过克隆已有对象来创建新对象。
  • 接口隔离原则(ISP):通过抽象接口定义克隆方法,使得客户端不需要了解复杂的克隆逻辑。

理由

  • 原型模式将克隆逻辑与对象的其他逻辑分离,使得类的职责更加明确。
  • 新增克隆逻辑时,只需实现新的原型类,而不需要修改现有代码,符合开闭原则。
  • 客户端通过抽象原型接口与原型对象交互,不需要了解具体克隆细节,符合接口隔离原则。

6. KISS原则(Keep It Simple, Stupid)

体现的原则

  • 简单性:尽管创建型设计模式在某些情况下可能看起来有些复杂,但它们的目的在于将复杂性分解为多个简单的部分,并通过抽象和封装来简化代码的使用和维护。

理由

  • 通过将复杂的对象创建过程分解为多个简单的部分,每个部分负责单一任务,从而使得整体代码更加简单易懂。
  • 抽象接口和工厂类的设计使得客户端代码更加简洁,不需要了解复杂的创建细节。

总结

C++创建型设计模式在实现过程中充分体现了SOLID原则和KISS原则。它们通过分离复杂性、封装创建逻辑、定义清晰的接口和依赖抽象,使得代码更加灵活、可维护和可扩展。这些原则的应用不仅使得代码更易于理解和维护,还有助于应对未来的变化和扩展需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472878.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Word_小问题解决_1

1.第二页是空白的,但是删不掉 将鼠标弄到第二页最开始的地方打开段落设置行距为固定值0.7磅 2.表格中有文字进入了表格中怎么办 打开段落,将缩进改为0即可

LLM - 计算 多模态大语言模型 的参数量(Qwen2-VL、Llama-3.1) 教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/143749468 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 影响 (…

GEE下载ERA5-Land气象数据(1950-至今,降水、温度)

GEE下载ERA5-Land气象数据(1950-至今,降水、温度) ERA5-Land是一个高分辨率的陆地再分析数据集,相比ERA5数据集具有更高的空间分辨率。它是通过重新运行ECMWF ERA5气候再分析系统的陆地分量生成的。 空间分辨率特点: 网格间距…

动态规划-完全背包问题——518.零钱兑换II

1.题目解析 建议先看 322.零钱兑换可以 更加轻松的理解本题 题目来源 518.零钱兑换——力扣 测试用例 2.算法原理 1.状态表示 本题要求返回所有情况,所以dp值就代表所有的方法数,即 dp[i][j]:在[1,i]个硬币中选择不同面值的硬币&#xff0c…

推荐15个2024最新精选wordpress模板

以下是推荐的15个2024年最新精选WordPress模板,轻量级且SEO优化良好,适合需要高性能网站的用户。中文wordpress模板适合搭建企业官网使用。英文wordpress模板,适合B2C网站搭建,功能强大且兼容性好,是许多专业外贸网站的…

使用Java绘制图片边框,解决微信小程序map组件中marker与label层级关系问题,label增加外边框后显示不能置与marker上面

今天上线的时候发现系统不同显示好像不一样,苹果手机打开的时候是正常的,但是一旦用安卓手机打开就会出现label不置顶的情况。尝试了很多种办法,也在官方查看了map相关的文档,发现并没有给label设置zIndex的属性,只看到…

微信小程序 https://thirdwx.qlogo.cn 不在以下 downloadFile 合法域名列表中

授权登录后,拿到用户头像进行加载,但报错提示: https://thirdwx.qlogo.cn 不在以下 downloadFile 合法域名列表中 解决方法一(未完全解决,临时处理):在微信开发者工具将不校验...勾上就可以访问…

【HAProxy09】企业级反向代理HAProxy高级功能之压缩功能与后端服务器健康性监测

HAProxy 高级功能 介绍 HAProxy 高级配置及实用案例 压缩功能 对响应给客户端的报文进行压缩,以节省网络带宽,但是会占用部分CPU性能 建议在后端服务器开启压缩功能,而非在HAProxy上开启压缩 注意:默认Ubuntu的包安装nginx开…

zabbix7.0实操指南:基于麒麟V10操作系统部署zabbix7.0

在当今信息技术飞速发展的时代,企业对于IT基础设施的监控管理需求日益增长。为了确保系统的稳定性和高效性,我们需要一个强大的监控工具来实时监控各种硬件和软件资源的状态。Zabbix作为一个开源的企业级监控解决方案,因其强大的功能和灵活的…

Android笔记(三十七):封装一个RecyclerView Item曝光工具——用于埋点上报

背景 项目中首页列表页需要统计每个item的曝光情况,给产品运营提供数据报表分析用户行为,于是封装了一个通用的列表Item曝光工具,方便曝光埋点上报 源码分析 核心就是监听RecyclerView的滚动,在滚动状态为SCROLL_STATE_IDLE的时…

微服务瞎写

1.微服务解决的问题 1、如何发现新节点以及检查各节点的运行状态? 2、如何发现服务及负载均衡如何实现? 3、服务间如何进行消息通信? 4、如何对使用者暴露服务API? 5、如何集中管理各节点配置文件? 6、如何收集各…

群控系统服务端开发模式-应用开发-前端图片格式功能开发

一、添加视图 在根目录下src文件夹下views文件夹下param文件夹下grade文件夹下&#xff0c;新建index.vue&#xff0c;代码如下 <template><div class"app-container"><div class"filter-container" style"float:left;"><…

创建vue+electron项目流程

一个vue3和electron最基本的环境搭建步骤如下&#xff1a;// 安装 vite vue3 vite-plugin-vue-setup-extend less normalize.css mitt pinia vue-router npm create vuelatest npm i vite-plugin-vue-setup-extend -D npm i less -D npm i normalize.css -S &#xff0…

Android Studio 控制台输出的中文显示乱码

1. Android Studio 控制台输出的中文显示乱码 1.1. 问题 安卓在调试阶段&#xff0c;需要查看app运行时的输出信息、出错提示信息。乱码&#xff0c;会极大的阻碍开发者前进的信心&#xff0c;不能及时的根据提示信息定位问题&#xff0c;因此我们需要查看没有乱码的打印信息。…

常见的测试方法

软件测试是软件⽣命周期中的⼀个重要环节&#xff0c;具有较⾼的复杂性&#xff0c;对于软件测试&#xff0c;可以从不同的⻆度加以分类&#xff0c;使开发者在软件开发过程中的不同层次、不同阶段对测试⼯作进⾏更好的执⾏和管理测试的分类⽅法。 按照测试目标分类 界面测试…

Linux驱动开发第2步_“物理内存”和“虚拟内存”的映射

“新字符设备的GPIO驱动”和“设备树下的GPIO驱动”都要用到寄存器地址&#xff0c;使用“物理内存”和“虚拟内存”映射时&#xff0c;非常不方便&#xff0c;而pinctrl和gpio子系统的GPIO驱动&#xff0c;非常简化。因此&#xff0c;要重点学习pinctrl和gpio子系统下的GPIO驱…

【0x001C】HCI_Write_Page_Scan_Activity详解

目录 一、命令概述 二、命令格式和参数说明 2.1. HCI_Write_Page_Scan_Activity命令格式 2.2. Page_Scan_Interval 2.3. Page_Scan_Window 三、响应事件及参数说明 3.1. HCI_Command_Complete事件 3.2. Status 3.3. 示例 四、命令执行流程 4.1. 命令发起阶段(主机端…

【AI图像生成网站Golang】雪花算法

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构(等待更新) 五、图床上传与图像生成API搭建(等待更新) 六、项目测试与调试(等待更新) 雪花算法 雪花算法 (Snowflake) 是一种高效、可扩展的分布式唯一ID生成算法&#xff0c;最早…

JMeter与大模型融合应用之JMeter日志分析服务化实战应用

JMeter与大模型融合应用之JMeter日志分析服务化 引言 在当今的互联网时代,网站和应用程序的性能直接影响到用户的体验和业务的成功。为了保证系统的稳定性和高效性,性能测试成为了软件开发过程中的一个重要环节。在这其中,Apache JMeter作为一款开源的性能测试工具,凭借其…

Docker环境搭建Cloudreve网盘服务(附shell脚本一键搭建)

Docker搭建Cloudreve Cloudreve介绍&#xff1a; Cloudreve 是一个基于 ThinkPHP 框架构建的开源网盘系统&#xff0c;旨在帮助用户以较低的成本快速搭建起既能满足个人也能满足企业需求的网盘服务。Cloudreve 支持多种存储介质&#xff0c;包括但不限于本地存储、阿里云OSS、…