当前位置: 首页 > news >正文

软件开发中常见的设计原则

软件开发中常见的设计原则

  • 1. 单一责任原则
  • 2. 开放封闭原则
  • 3. 里氏替换原则
  • 4. 接口分离原则
  • 5. 依赖倒置原则
  • 6. 迪米特法则
  • 7. 合成复用原则
  • 8. 共同封闭原则
  • 9. 稳定抽象原则
  • 10. 稳定依赖原则

简写全拼中文翻译
SRPThe Single Responsibility Principle单一责任原则
OCPThe Open Closed Principle开放封闭原则
LSPThe Liskov Substitution Principle里氏替换原则
ISPThe Interface Segregation Principle接口分离原则
DIPThe Dependency Inversion Principle依赖倒置原则
LODThe Law of Demeter迪米特法则
CRPThe Composite Reuse Principle合成复用原则
CCPThe Common Closure Principle共同封闭原则
SAPThe Stable Abstractions Principle稳定抽象原则
SDPThe Stable Dependencies Principle稳定依赖原则

在这里插入图片描述

1. 单一责任原则

修改一个类的原因应该只有一个。
换句话说就是让一个类只负责一件事,当这个类需要做过多事情的时候,就需要分解这个类。
如果一个类承担的职责过多,就等于把这些职责耦合在了一起,一个职责的变化可能会削弱这个类完成其它职责的能力。

2. 开放封闭原则

类应该对扩展开放,对修改关闭。
扩展就是添加新功能的意思,因此该原则要求在添加新功能时不需要修改代码。
符合开闭原则最典型的设计模式是装饰者模式,它可以动态地将责任附加到对象上,而不用去修改类的代码。

3. 里氏替换原则

子类对象必须能够替换掉所有父类对象。
继承是一种 IS-A 关系,子类需要能够当成父类来使用,并且需要比父类更特殊。
如果不满足这个原则,那么各个子类的行为上就会有很大差异,增加继承体系的复杂度。

4. 接口分离原则

不应该强迫客户依赖于它们不用的方法。
因此使用多个专门的接口比使用单一的总接口要好。

5. 依赖倒置原则

高层模块不应该依赖于低层模块,二者都应该依赖于抽象;
抽象不应该依赖于细节,细节应该依赖于抽象。
高层模块包含一个应用程序中重要的策略选择和业务模块,如果高层模块依赖于低层模块,那么低层模块的改动就会直接影响到高层模块,从而迫使高层模块也需要改动。
依赖于抽象意味着:
任何变量都不应该持有一个指向具体类的指针或者引用;
任何类都不应该从具体类派生;
任何方法都不应该覆写它的任何基类中的已经实现的方法。

6. 迪米特法则

迪米特法则又叫作最少知识原则(Least Knowledge Principle,简写 LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。

7. 合成复用原则

尽量使用对象组合,而不是通过继承来达到复用的目的。

8. 共同封闭原则

一起修改的类,应该组合在一起(同一个包里)。如果必须修改应用程序里的代码,我们希望所有的修改都发生在一个包里(修改关闭),而不是遍布在很多包里。

9. 稳定抽象原则

最稳定的包应该是最抽象的包,不稳定的包应该是具体的包,即包的抽象程度跟它的稳定性成正比。

10. 稳定依赖原则

包之间的依赖关系都应该是稳定方向依赖的,包要依赖的包要比自己更具有稳定性。

相关文章:

软件开发中常见的设计原则

软件开发中常见的设计原则 1. 单一责任原则2. 开放封闭原则3. 里氏替换原则4. 接口分离原则5. 依赖倒置原则6. 迪米特法则7. 合成复用原则8. 共同封闭原则9. 稳定抽象原则10. 稳定依赖原则 简写全拼中文翻译SRPThe Single Responsibility Principle单一责任原则OCPThe Open Clo…...

Linux安装ffmpeg并截取图片和视频的缩略图使用

Linux安装ffmpeg并截取图片和视频的缩略图使用 官方下载地址: http://www.ffmpeg.org/download.html#releases 我这里使用版本: ffmpeg_3.2_repo.tar.gz 可以百度网盘分享给大家 安装的环境为 Centos 64位操作系统 安装时须为 root 用户进行操作 #解压 tar -zxvf ffmpeg_3…...

第三章:人工智能深度学习教程-基础神经网络(第一节-ANN 和 BNN 的区别)

你有没有想过建造大脑之类的东西是什么感觉,这些东西是如何工作的,或者它们的作用是什么?让我们看看节点如何与神经元通信,以及人工神经网络和生物神经网络之间有什么区别。 1.人工神经网络:人工神经网络(…...

高防CDN与高防服务器:为什么高防服务器不能完全代替高防CDN

在当今的数字化时代,网络安全已经成为企业不容忽视的关键问题。面对不断增长的网络威胁和攻击,许多企业采取了高防措施以保护其网络和在线资产。然而,高防服务器和高防CDN是两种不同的安全解决方案,各自有其优势和局限性。在本文中…...

关于卷积神经网络的多通道

多通道输入 当输入的数据包含多个通道时,我们需要构造一个与输入通道数相同通道数的卷积核,从而能够和输入数据做卷积运算。 假设输入的形状为n∗n,通道数为ci​,卷积核的形状为f∗f,此时,每一个输入通道都…...

19、Flink 的Table API 和 SQL 中的内置函数及示例(1)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

<a>标签的download属性部分浏览器无法自动识别文件后缀

问题 最近开发中遇到的问题,文件名中含有点和逗号字符,当使用a标签的download属性下载内容时,如果不指定后缀,部分浏览器无法自动识别文件后缀。如下图所示: 定义用法 download 属性定义了下载链接的地址。 href 属性…...

前端图片压缩上传,减少等待时间!优化用户体检

添加图片注释,不超过 140 字(可选) 这里有两张图片,它们表面看上去是一模一样的,但实际上各自所占用的内存大小相差了180倍。 添加图片注释,不超过 140 字(可选) 添加图片注释&…...

Ionic header content footer toolbar UI实例

1 ionic的button图标 <ion-header [translucent]"true"><ion-toolbar><ion-buttons slot"start"><ion-back-button default-href"/tabs/tab1" text"back" icon"caret-back"></ion-back-button&…...

uniapp 解决H5跨域的问题

uniapp 解决h5跨域问题 manifest.json manifest.json文件中&#xff0c;点击“源码视图”,在此对象的最后添加以下代码&#xff1a; "h5" : {"devServer" : {"port" : 8080, //端口号"disableHostCheck" : true,"proxy" :…...

对称加密(symmetric encryption)和非对称加密(Asymmetric Encryption)(密钥、公钥加密、私钥解密)AES、RSA

文章目录 对称加密与非对称加密对称加密1.1 定义1.2 工作原理1.3 场景分析1.4 算法示例&#xff08;以AES为例&#xff09;1.5 对称加密的优点与缺点优点缺点 非对称加密2.1 定义2.2 工作原理注意&#xff1a;每次生成的RSA密钥对都会不一样 2.3 场景分析2.4 算法示例&#xff…...

iOS 16.4 之后真机与模拟器无法使用Safari调试H5页面问题

背景 iOS 16.4之后用真机调试H5时候发现&#xff0c;Safari中开发模块下面无法调试页面 解决方案 在WKWebView中设置以下代码解决 if (available(iOS 16.4, *)) {[_webView setInspectable:YES];}然后再次调试就可以了...

野火霸天虎 STM32F407 学习笔记_3 尝试寄存器映射方式点亮 LED 灯

新建工程 寄存器方式 要命啊&#xff0c;一看名字我就不想试。寄存器新建不得麻烦死。 哎算了为了学习原理&#xff0c;干了。 我们尝试自己写一个寄存器的库函数来引用。 首先我们需要引用 st 官方启动文件 stmf4xx.s&#xff0c;具体用途后面章节再展开讲解。然后我们自…...

ZZ308 物联网应用与服务赛题第F套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;F卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用…...

怎样选择文件外发控制系统,让数据实现高效安全交换?

制造型企业都非常重视其知识产权&#xff08;IP&#xff09;的安全性&#xff0c;尤其是其最有价值的产品设计数据的安全问题。基于复杂的供应链生态&#xff0c;每天可能要与几十家甚至上百家供应商及合作伙伴进行数据交换。不管是一级还是二级供应商&#xff0c;合作伙伴还是…...

专访 SPACE ID:通往 Web3 无许可域名服务协议之路

Web3 行业发展风起云涌&#xff0c;对于初创项目而言&#xff0c;如何寻找适合自己的赛道是首要问题。当前伴随用户交互和跨平台操作需求日渐兴起&#xff0c;如何更迅速地使用一站式域名实现便捷验证成为大众的心头期盼。 这一背景下&#xff0c;SPACE ID 于众星林立的 Web3 …...

合并分支--将自己的分支合并到master分支

在版本控制系统&#xff08;例如Git&#xff09;中&#xff0c;将自己的分支合并到master&#xff08;或者主分支&#xff09;通常需要以下步骤&#xff1a; ### 1. 切换到主分支 首先&#xff0c;确保你的本地仓库当前处于主分支。你可以使用以下命令切换到主分支&#xff1…...

力扣:153. 寻找旋转排序数组中的最小值(Python3)

题目&#xff1a; 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,1,2]若旋转…...

matlab中实现画函数图像添加坐标轴

大家好&#xff0c;我是带我去滑雪&#xff01; 主函数matlab代码&#xff1a; function PlotAxisAtOrigin(x,y); if nargin 2 plot(x,y);hold on; elsedisplay( Not 2D Data set !) end; Xget(gca,Xtick); Yget(gca,Ytick); XLget(gca,XtickLabel); YLget(gca,YtickLabel)…...

C语言求解一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

完整代码&#xff1a; /* 一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问 该数是多少&#xff1f;*/ #include<stdio.h>int main(){//num为最终所求那个数int num;//i*i为第一个完全平方数for (int i 10; …...

RePKG全解析:从资源提取到壁纸开发的终极解决方案

RePKG全解析&#xff1a;从资源提取到壁纸开发的终极解决方案 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 在数字内容创作领域&#xff0c;尤其是动态壁纸开发和游戏资源处理中&…...

IndexTTS2 V23应用案例:打造智能客服语音,让机器说话更有人情味

IndexTTS2 V23应用案例&#xff1a;打造智能客服语音&#xff0c;让机器说话更有人情味 1. 为什么智能客服需要情感语音&#xff1f; 在当今的客户服务场景中&#xff0c;冰冷的机械语音正在被市场淘汰。研究表明&#xff0c;带有适当情感的语音交互能显著提升用户体验&#…...

Flutter集成鸿蒙适配三方库:基础级鸿蒙应用开发实践案例

Flutter集成鸿蒙适配三方库&#xff1a;基础级鸿蒙应用开发实践案例 欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net 本文聚焦基础级开发场景&#xff0c;以“Flutter搭建鸿蒙应用集成鸿蒙适配版三方库”为核心&#xff0c;提供一步一操作…...

Qwen3-Embedding-4B GPU算力优化:CUDA Stream并发执行向量化与相似度计算,吞吐提升1.8倍

Qwen3-Embedding-4B GPU算力优化&#xff1a;CUDA Stream并发执行向量化与相似度计算&#xff0c;吞吐提升1.8倍 1. 引言&#xff1a;当语义搜索遇上性能瓶颈 想象一下&#xff0c;你正在使用一个智能语义搜索工具&#xff0c;输入“我想吃点东西”&#xff0c;它立刻为你找到…...

Qwen3.5-9B开源可部署实践:国产昇腾910B适配方案(CANN+PyTorch NPU移植)

Qwen3.5-9B开源可部署实践&#xff1a;国产昇腾910B适配方案&#xff08;CANNPyTorch NPU移植&#xff09; 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型&#xff0c;具备强大的逻辑推理、代码生成和多轮对话能力。该模型特别针对国产昇腾910B处理器进行了优化…...

AI命理推理实测:用专业数据集验证大模型命理能力

提到AI命理相关的评测&#xff0c;就不得不说之前看到的&#xff0c;我们团队最近也沿着这个方向做了针对性测试&#xff0c;不是网上那种随便给大模型发个prompt就喊“准到离谱”的营销玩法&#xff0c;而是用有标准答案的盲测来验证AI命理推理的真实水平。 我们的评测是怎么…...

如祺出行2025年营收53亿:网约车贡献97%收入 净亏2.9亿

雷递网 乐天 4月1日如祺出行科技有限公司&#xff08;股份代号&#xff1a;9680&#xff09;日前发布截至2025年12月31日的财报。财报显示&#xff0c;如祺出行2025年营收为52.86亿元&#xff0c;较上年同期的24.63亿元增长114.6%。如祺出行收入主要来自网约车服务&#xff0c;…...

OpenClaw对接Qwen3-4B实战:5步完成本地模型调用与自动化任务

OpenClaw对接Qwen3-4B实战&#xff1a;5步完成本地模型调用与自动化任务 1. 为什么选择OpenClawQwen3-4B组合 去年冬天第一次听说OpenClaw时&#xff0c;我正被重复性的文件整理工作折磨得焦头烂额。作为一个习惯用脚本解决问题的开发者&#xff0c;我试过各种自动化工具&…...

大厂高薪抢手!文科生如何抓住AI时代机遇,实现职业逆袭?

大厂纷纷高薪招聘文科生&#xff0c;引发社会关注。文科生凭借沟通、叙事、逻辑等优势&#xff0c;在大模型理解人类价值观、企业品牌宣传等方面发挥作用。高校也调整专业设置&#xff0c;培养跨学科人才。文章建议文科生根据自身专业&#xff0c;向文案策划、品牌宣传、法务、…...

FastAPI + SQLite:从基础CRUD到安全并发的实战指南

核心摘要本文将带你超越FastAPI SQLite的基础CRUD搭建&#xff0c;聚焦于安全防护&#xff08;认证、授权、输入验证&#xff09;与并发处理&#xff08;数据库连接池、异步优化&#xff09;两大实战痛点。你会获得一套可直接复用的项目骨架&#xff0c;并理解其背后的设计逻辑…...