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

news2024/10/5 14:28:00

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

  • 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.coloradmin.cn/o/1184668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flink--Data Source 介绍

Data Source 简介 Flink 做为一款流式计算框架,它可用来做批处理,即处理静态的数据集、历史的数据集;也可以用来做流处理,即实时的处理些实时数据流,实时的产生数据流结果,只要数据源源不断的过来&#xff…

前端面试题之Javascript篇

一、JavaScript基础 1、数组有哪些方法 添加/删除元素 push() 向尾部添加元素pop() 从尾部提取一个元素shift() 从首端提取元素unshift() 从首端添加元素splice(start, deleteCount, item1...itemN) start表示开始计算的索引,deleteCount表示从start开始计算的元…

PTA_乙级_1006

思路&#xff1a;把数字的每一位都取出来&#xff0c;然后for循环把字符输入 #include <iostream> #include <string> using namespace std;int main() {int n;cin >> n;int b n / 100; // 计算百位数int s (n % 100) / 10; // 计算十位数int g n…

大学智能电表改造解决方案

随着科技的不断发展&#xff0c;我国高等教育院校在基础设施方面也在不断进行智能化升级。电力系统作为大学校园的重要组成部分&#xff0c;对其进行智能化改造已成为当前高校建设的热门话题。本文将详细介绍大学智能电表改造解决方案&#xff0c;以期为我国高校的电力系统智能…

Unity Input System最简单使用

开始学的是 Input Manager 比较好理解&#xff0c;Input System却不好理解&#xff0c;教程也找了很多&#xff0c;感觉都讲的不清楚&#xff0c;我这里做一个最简单的用 Input System 添加鼠标左键和右键的效果。 1. 安装 Input System 包 首先这个功能不是内置的&#xff0…

Linux内核有什么之内存管理子系统有什么第二回 —— 单刀直入

接前一篇文章&#xff1a;Linux内核有什么之内存管理子系统有什么第一回 —— 引言 一、单刀直入 —— 一切从malloc开始 想必大家都使用过malloc()&#xff0c;malloc的全称是memory allocation&#xff0c;中文叫做动态内存分配。其用于申请一块连续的指定大小的内存块区域以…

公众号生成链接

登录公众号 后点击左侧“设置与开发” 下 公众号设置&#xff0c;点击账号详情&#xff0c;然后查看源代码&#xff0c;搜索uin_base64 找到参数&#xff0c;然后设置到地址_biz上。在微信中打开就可以链接到微信公众号。 如下&#xff1a;

CSS 网页布局

网页布局有很多种方式&#xff0c;一般分为以下几个部分&#xff1a;头部区域、菜单导航区域、内容区域、底部区域&#xff1a; 1&#xff09;、头部区域位于整个网页的顶部&#xff0c;一般用于设置网页的标题或者网页的logo。 <style> body { margin: 0; } /* 头部样…

香港优才计划diy申请失败怎么回事?怎么办?那些后悔莫及的事儿!

香港优才计划diy申请失败怎么回事&#xff1f;怎么办&#xff1f;那些后悔莫及的事儿&#xff01; 今年香港优才计划申请由于政策放开&#xff0c;申请人数确实暴涨&#xff01;不过近期收获到不少客户申请被拒的倾诉&#xff0c;我能感受到他们对申请失败的失落心情&#xff0…

PODsys:大模型AI算力平台部署的开源“神器”

大模型是通用人工智能的底座&#xff0c;但大模型训练对算力平台的依赖非常大。大模型算力平台是指支撑大模型训练和推理部署的算力基础设施&#xff0c;包括业界最新的加速卡、高速互联网络、高性能分布式存储系统、液冷系统和高效易用的大模型研发工具和框架。在算力平台的部…

【k8s】pod控制器

一、pod控制器及其功用 Pod是kubernetes的最小管理单元&#xff0c;在kubernetes中&#xff0c;按照Pod的创建方式可以将其分为两类 自主式Pod&#xff1a; kubernetes直接创建出来的Pod&#xff0c;这种Pod删除后就没有了&#xff0c;也不会重建 控制器创建的Pod&#xff1a…

物联网水表有什么弊端吗?

物联网水表作为新一代智能水表&#xff0c;虽然在很大程度上提高了水资源的管理效率&#xff0c;但也存在一定的弊端。在这篇文章中&#xff0c;我们将详细讨论物联网水表的弊端&#xff0c;以帮助大家更全面地了解这一技术。 一、安全隐患 1.数据泄露&#xff1a;物联网水表通…

vue+java实现语音转文字思路

思路&#xff1a; 前端录音生成wav文件后端去解析 技术&#xff1a; 后端&#xff1a; Vosk是一个离线开源语音识别工具。它可以识别16种语言&#xff0c;包括中文。 API接口&#xff0c;让您可以只用几行代码&#xff0c;即可迅速免费调用、体验功能。 目前支持 WAV声音文件…

MobaXterm配置SSHTunnel

本地与远程服务器之间存在防火墙&#xff0c;防火墙只允许SSH端口通过&#xff0c;为访问远程服务器&#xff0c;我们可以借助MobaXterm来与SSH服务器建立隧道&#xff0c;使得防火墙外的用户能够访问远程服务器 配置 打开SSHTunnel 新建SSH tunnel 点击开启就生效了&…

数据链路相关技术

文章目录 数据链路相关技术MAC地址半双工通信与全双工通信共享介质型网络非共享介质网络根据MAC地址转发以太网无线通信 数据链路相关技术 MAC地址 MAC地址用于识别数据链路中互连的节点&#xff0c;以太网或FDDI中&#xff0c;根据IEEE802.3的规范使用MAC地址。其中IEEE指的…

详解交叉验证中【KFold】【Stratified-KFold】【StratifiedShuffleSplit】的区别

交叉验证是一种统计分析方法&#xff0c;它的目的是通过在同一数据集上重复并分割训练和测试数据&#xff0c;来评估机器学习模型的性能。以下是​这三种交叉验证方法的区别&#xff1a; KFold&#xff08;K-折叠&#xff09; 在KFold交叉验证中&#xff0c;原始数据集被分为K个…

思杰Citrix将全面退出中国市场,是真的吗?

引言&#xff1a;国内虚拟化市场依然有潜力&#xff0c;转换思路继续开发&#xff0c;这个可能性最大。 【科技明说 &#xff5c; 热点关注】 业内讨论说&#xff0c;虚拟化大佬思杰Citrix将全面退出国内市场&#xff0c;不知道消息是否属实&#xff1f; 另外假如消息属实的话…

串口调试助手和网络调试助手使用总结

串口调试助手和网络调试助手是用的比较多的两款工具。 先来看看串口调试助手。 本人用的比较多的串口助手是正点原子的XCOM以及大虾丁丁的SSCOM 首先&#xff0c;解决下串口收发时的统计问题。 注意&#xff1a;这里统计的单位是字节。 串口工具发送时&#xff0c;就只统计你…

05-MySQL-进阶-存储引擎索引SQL优化

一、存储引擎 涉及资料 链接&#xff1a;https://pan.baidu.com/s/1M1oXN_pH3RGADx90ZFbfLQ?pwdCoke 提取码&#xff1a;Coke ①&#xff1a;MySQL体系结构 1.连接层 最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 T…

掌握未来:PureBasic for Mac引领BASIC语言编辑器的新潮流

PureBasic for Mac是一种创新的BASIC语言编辑器&#xff0c;它赋予了编程更多的可能性。在这个充满机遇的时代&#xff0c;掌握编程就等于掌握了一种强大的工具&#xff0c;能够更好地理解和塑造世界。而PureBasic for Mac&#xff0c;正是这样一个让你轻松上手&#xff0c;高效…