单一职责原则

对于一个类而言,有且仅有一个引起他变化的原因或者说,一个类只负责一个职责

如果一个类承担的职责过多,那么这些职责放在一起耦合度太高了,一个职责的变化可能会影响这个类其他职责的能力。

所以我们在做软件设计的时候,要发现职责,并且把这些职责互相分开

例子1

对于看书这件事情,用手机看书和直接看纸质书相比,肯定纸质书的效率要高一些。

因为手机的职责太多了,接打电话、听歌、看电视剧等等,我们在看书的时候,可能收别的职责的影响。

而纸质书,只有一个职责,沉浸式读书。

例子2

电脑机箱中,由CPU、内存、硬盘、显卡、主板等等。

假设我们的CPU、内存、应该、显卡是高层模块,电脑中应该叫易插拔,都插到主板中。

对于电脑这个主体而言,就符合单一职责原则,内存条坏了,不会影响CPU、磁盘和主板。

开闭原则

对扩展开发,对修改封闭【多扩展、少修改】

当我们面对新需求的时候,对程序的修改只是通过增加代码的方式,而不用去修改已有的代码。

这样做我们程序变得更加,可扩展、可维护、可服用、灵活性。

例子

假设现在我们由两个模块,一个是高层模块(做业务逻辑模块),一个底层模块(数据库模块)。

数据库的一些常见操作比如:增删改查,但是我们使用的数据库可以是MySQL、SQLServer、Postgresql等等。

那么如果做到开闭原则呐,抽象出一个类,如果新加了数据库去继承这个类,然后自己去实现增删改查接口。

这样就做到了对扩展开发,对修改封闭了。

依赖倒置原则

高层模块不应该依赖于底层模块,他们都应该依赖于抽象

我们要针对接口编程,而不是针对实现编程

例子1

电脑举例,CPU、内存、硬盘、显卡都应该依赖于抽象接口,而不是依赖于具体的主板。

如果依赖于具体的主板,那么主板坏了,这些高层的设备都用不了了,这样设计显然不合理。

例子2

还是上面那个例子,高层模块(业务逻辑层)和底层模块(数据库层)都不应该互相依赖,而是依赖于抽象。

高层模块 => 抽象 => 低层模块

抽象其实就是基类,底层模块是子类。

MySQL、SQLServer、PostgreSQL都有增删改查操作,假设有一天要用到别的数据库

只需要再创建一个类,继承抽象去实现这些接口,对于高层模块而言,不需要任何的改变(或者只需要改变new的对象而已)

里氏替换原则

子类必须能够替代父类
例子

假设鸟是父类,那么鸵鸟和企鹅能继承于鸟类吗?

如果按照初中老师讲的,鸵鸟和企鹅虽然不能飞,但是属于鸟类。

但是再我们编程的世界里面,如果鸵鸟和企鹅可以继承鸟类,这是不合理的,违反了里氏替换原则。

还是举一个例子,他们的高层模块 => 抽象 => 低层模块

如果抽象中要使用的方法就是鸟的会飞的方法,但是我们底层模块是鸵鸟,根本不会飞,这样就会产生严重的错误

所以里氏替换原子是实现依赖倒置原则的基础

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

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

相关文章

windows11右键菜单新增项增加drawio文件,使用draw.io

目录1.新建空白模板2.建立注册表文件1.新建空白模板 这里我们的模板文件路径为 D:\Software\drawio\template.drawio 2.建立注册表文件 首先新建一个.txt文件,我这里取名为menulize.txt,然后将下面的内容复制到.txt文件中 Windows Registry Editor Ver…

解锁网页魔法:零基础HTML通关秘籍

文章目录**解锁网页魔法:零基础HTML通关秘籍**HTML 基础目标HTML 结构认识 HTML 标签HTML 文件基本结构标签层次结构快速生成代码框架HTML 常见标签注释标签注释的原则标题标签: h1-h6段落标签: p换行标签:br综合案例: 展示博客超链接标签: a表格标签**基…

类似 Pixso 但更侧重「网页 / 软件界面设计」「前后端可视化开发」的工具

从 GoView 的 Demo 功能来看,它主要聚焦于数据可视化大屏的低代码搭建,更侧重数据图表配置和页面布局,没有类似 Pixso 的在线 UI 设计(如矢量绘图、组件样式精细化设计)功能,其核心是通过预设组件快速构建数…

MySQL--组从复制的详解及功能演练

2.MySQL的组从复制 2.1 配置mastesr [rootmysqlaa ~]# vim /etc/my.cnf [mysqld] server-id10 datadir/data/mysql socket/data/mysql/mysql.sock default_authentication_pluginmysql_native_password log-binmysql-bin[rootmysqlaa ~]# /etc/init.d/mysqld restart# 进入数据…

JavaScript将String转为base64 笔记250802

JavaScript将String转为base64 笔记250802 在 JavaScript 中将字符串转换为 Base64 编码有多种方法,每种方法都有其适用场景。下面我将全面介绍这些方法,包括处理 ASCII 字符、Unicode 字符以及性能优化方案。 基础方法:btoa() 基本用法&a…

Unity3D数学第四篇:射线与碰撞检测(交互基础篇)

Unity3D数学第一篇:向量与点、线、面(基础篇) Unity3D数学第二篇:旋转与欧拉角、四元数(核心变换篇) Unity3D数学第三篇:坐标系与变换矩阵(空间转换篇) Unity3D数学第…

数据处理和统计分析——09 数据分组

1 聚合 1.1 简介 在SQL中我们经常使用GROUP BY将某个字段,按不同的取值进行分组,在Pandas中也有groupby()函数;分组之后,每组都会有至少1条数据,将这些数据进一步处理返回单个值的过程就是聚合,比如分组之后…

【数据结构与算法】数据结构初阶:排序内容加餐(一)——快速排序:三路划分、自省排序

🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题 🍉学习方向:C/C方向 ⭐️人生格言:为天地立心,为生民立命,为…

MySqL(加餐)

范式第一范式数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,对象等非原子数据。在关系型数据库的设计中,满足第一范式是对关系模式的基本要求。不满足第一范式的数据库就不能被称为关系数据库。第一范式实际上只要…

【redis】基于工业界技术分享的内容总结

Redis 实践指南与核心概念 一、Java 中常用的 Redis 使用场景与实践 缓存(Caching) 场景:热点数据、频繁访问的数据,如商品详情、用户信息。通过缓存减少数据库压力,提高系统响应速度。 工业界实践: 淘宝…

服务端之nestJS常用异常类及封装自定义响应模块

MENU前言常用异常类(由nestjs/common提供)示例自定义异常(可选)自定义响应模块前言 在NestJS中,nestjs/common提供了大量的内置异常类,主要用于在控制器、服务等层抛出特定的HTTP错误响应。 常用异常类&…

数据链路层、NAT、代理服务、内网穿透

目录 一. 以太网 以太网帧格式 二. MAC地址 三. MTU 四. ARP协议 五. NAT NAPT 六. 代理服务器 正向代理 反向代理 七. 内网穿透 八. 内网打洞 一. 以太网 • "以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内 容, 也包含了一些物理层…

Rust在CentOS 6上的移植

Rust已不支持Cent OS 6 rhel是Redhat 发布的Red Hat Enterprise Linux的简称,使用rhel源代码编译的CentOS,最新的版本是CentOS 7,于2024年停止支持。而更古老的CentOS 6,则在2020年就已经结束了。 而面对如此老旧的系统&#xf…

C++音视频开发:基础面试题

音视频领域技术门槛高,学习资料稀缺,体系化书籍和开发工具有限,新手入门困难。音视频开发涉及众多任务:音频(采集、编解码、降噪等)、视频(采集、编解码、图像处理)、实时传输&#…

C++刷题 - 7.27

贪心算法的详细逻辑这个问题的最优解可以用 贪心算法 在 O(N) 时间 内解决。它的核心思想是:每次操作尽可能覆盖最长的连续非零区间,并通过数学分析发现:最小操作次数等于所有“上升台阶”的高度差之和。1. 直观理解假设 steps [1, 2, 3, 2,…

音频3A处理简介之AGC(自动增益控制)

在音频通话和视频会议中,音频自动增益控制AGC模块的主要作用:• 稳定音频信号的输出电平。无论麦克风采集信号的强弱(如用户离麦克风远近程度不同),尽可能保证音频采集模块的输出音量保持相对一致,不会偏大…

web前端打包apk包

我用的是HBuilder工具,可视化更便捷,目前我这操作的apk包是不需要上架的,所以跟实际需要上架的可能还有些出入 首先先新建个项目,选择5App模式 把目前需要打包的内容上传到服务器,我们以嵌套的形式进行打包,找到index.…

Ansible提权sudo后执行报错

1.问题 配置了sudo提权信息后,执行ansible-play报错,报错信息如下:2.原因 sudo没有执行**/bin/sh的权限,而ansible脚本中依赖/bin/sh**,所以报错了: 查看日志sudo tail -f /var/log/secure3.解决方式 修改*…

.NET报表控件ActiveReports发布v19.0——正式兼容 .NET 9

ActiveReports 是一款专注于 .NET 和 .NET Core 平台的报表控件。通过拖拽式报表设计器,可以快速地设计 Excel表格、Word文档、图表、数据过滤、数据钻取、精准套打等类型报表,全面满足 WinForm、ASP.NET、ASP.NET MVC、WPF 平台中各种报表的开发需要。同…

SCI论文选词炼句

标准句子不能啰嗦;词不能有问题,得是SCI中经常出现的,符合上下文的。SCI论文中常出现的摸棱两可的词单词涵义例子Architecture指 整体系统设计方案,如网络层次结构、模块组合、激活函数选择等深度学习模型架构Structure更泛泛&…