当前位置: 首页 > 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. 稳定依赖原则

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

http://www.lryc.cn/news/222303.html

相关文章:

  • Linux安装ffmpeg并截取图片和视频的缩略图使用
  • 第三章:人工智能深度学习教程-基础神经网络(第一节-ANN 和 BNN 的区别)
  • 高防CDN与高防服务器:为什么高防服务器不能完全代替高防CDN
  • 关于卷积神经网络的多通道
  • 19、Flink 的Table API 和 SQL 中的内置函数及示例(1)
  • <a>标签的download属性部分浏览器无法自动识别文件后缀
  • 前端图片压缩上传,减少等待时间!优化用户体检
  • Ionic header content footer toolbar UI实例
  • uniapp 解决H5跨域的问题
  • 对称加密(symmetric encryption)和非对称加密(Asymmetric Encryption)(密钥、公钥加密、私钥解密)AES、RSA
  • iOS 16.4 之后真机与模拟器无法使用Safari调试H5页面问题
  • 野火霸天虎 STM32F407 学习笔记_3 尝试寄存器映射方式点亮 LED 灯
  • ZZ308 物联网应用与服务赛题第F套
  • 怎样选择文件外发控制系统,让数据实现高效安全交换?
  • 专访 SPACE ID:通往 Web3 无许可域名服务协议之路
  • 合并分支--将自己的分支合并到master分支
  • 力扣:153. 寻找旋转排序数组中的最小值(Python3)
  • matlab中实现画函数图像添加坐标轴
  • C语言求解一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  • AtCoder abc148
  • k8s、docker 卸载
  • 【Linux】Shell命令行的简易实现(C语言实现)内键命令,普通命令
  • Kafka -- 架构、分区、副本
  • CSS特效001:鼠标放div上,实现旋转、放大、移动等效果
  • gin 快速入门手册
  • Window下安装 Mongodb,并实现单点事务
  • 【通信原理】第三章 随机过程——例题
  • 线性【SVM】数学原理和算法实现
  • R语言中的函数26:polyroot多项式求根函数
  • 2023年辽宁省数学建模竞赛A题铁路车站的安全标线