五大设计原则——SOLID

article/2025/11/5 21:02:19

目录

简介:

1、单一职责原则(SRP)

2、开闭原则(OCP)

3、里式替换原则(LSP)

4、依赖倒置原则 (DIP)

5、接口隔离原则 (ISP)


简介:

无论是软件系统设计,还是代码实现,遵循有效和明确的设计原则,都利于系统软件灵活可靠,安全快速的落地,更重要的是能灵活应对需求的变化,更好的扩展系统以及维护。因此提出了五大设计原则-SOLID(五大设计原则是面向对象的根基 )。


1、单一职责原则(SRP)

单一职责原则(SRP)英文全称为 Single Responsibility Principle 是最简单,但也是最难用好的原则之一。它的定义也很简单:对于一个类而言,应该仅有一个引起它变化的原因。其中变化的原因就表示了这个类的职责,它可能是某个特定领域的功能,可能是某个需求的解决方案。这个原则表达的是不要让一个类承担过多的责任,一旦有了多个职责,那么他就越容易因为某个职责而被更改,这样的状态是不稳定的,不经意的修改很可能影响到这个类的其他功能,因此,我们需要将不同的职责封装到不同的类中,即将不同的变化原因封装在不同的类中,不同类之间的变化互不影响。

总结:

单⼀职责原则⽤于控制类的粒度⼤⼩,减少类中不相关功能的代码耦合,使得类更加的健壮;另外,单⼀职
责原则也适⽤于模块之间解耦,对于模块的功能划分有很⼤的指导意义。
简单来说就是让代码高内聚,低耦合。

2、开闭原则(OCP)

开闭原则 (OCP) 英⽂全称为 Open-Closed Principle ,基本定义是软件中的对象(类,模块,函数等)应该对于扩展是开放的,但是对于修改是封闭的。这里的对扩展开放 表示添加新的代码,就可以让程序行为扩展来满足需求的。
变化; 对修改封闭 表示在扩展程序行为时不要修改已有的代码,进而避免影响原有的功能。要实现不改代码的情 况下,仍要去改变系统行为的关键就是抽象和多态,通过接口或者抽象类定义系统的抽象层,再通过具体类来进行扩展。这样⼀来,无须对抽象层进行任何改动,只需要增加新的具体类来实现新的业务功能即可,达到开闭原则的要求。
总结:有了开闭原则,面向需求的变化就能进行快速的调整实现功能,这大大提高系统的灵活性,可重用性和可维护性,但会增加⼀定的复杂性。

3、里式替换原则(LSP)

里式替换原则 (LSP) 英文全称为 Liskov Substitution Principle ,基本定义为:在不影响程序正确性的基础上,所有使用基类的地方都能使用其子类的对象来替换。这里提到的基类和子类说的就是具有继承关系的两类对象,当我们传递⼀个子类型对象时,需要保证程序不会改变任何原基类的行为和状态,程序能正常运作。
里式替换原则目的就是要保证继承关系的正确性,所有⼦类的行为功能必须和使⽤者对其父类的期望保持一 致,如果字类达不到这⼀点,那么必然违反里氏替换原则。要让程序代码符合里式替换原则,需要保证⼦类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法,换句话就是子类可以扩展父类的功能,但不能改变父类原有的功能。

4、依赖倒置原则 (DIP)

依赖倒置原则 (DIP) 英⽂全称 Dependency Inversion Principle, DIP) ,基本定义是:
高层模块不应该依赖低层模块,两者应该依赖抽象;
抽象不应该依赖细节,细节应该依赖抽象。

这⾥的抽象就是接⼝和抽象类,⽽细节就是实现接⼝或继承抽象类⽽产⽣的类。如果⾼层模块依赖于低层模块,那 么低层模块的改动很有可能影响到⾼层模块,从⽽导致⾼层模块被迫改动,这样⼀来让⾼层模块的重⽤变得⾮常困 难。因此可以在⾼层模块构建⼀个稳定的抽象层,并且只依赖这个抽象层;⽽由底层模块完成抽象层的实现细节。 这样⼀来,⾼层类都通过该抽象接⼝使⽤下⼀层,移除了⾼层对底层实现细节的依赖。

5、接口隔离原则 (ISP)

接口隔离原则 (ISP) 英文全称为 Interface Segregation Principle ,基本定义:客户端不应该依赖那些它不需要的接口。客户端应该只依赖它实际使用的方法,因为如果⼀个接⼝具备了若干个方法,那就意味着它的实现类都要实现 所有接口方法,从代码结构上就十分臃肿。

总结:接口隔离原则主要功能就是控制接口的粒度大小,防止暴露给客户端无相关的代码和方法,保证了接口的高内聚,降低与客户端的耦合。


http://chatgpt.dhexx.cn/article/XwuFfErv.shtml

相关文章

1. 设计原则

文章目录 设计原则思维导图核心理论SOLID单一职责开放封闭里式替换接口隔离依赖反转 KISSDRYLOD 设计原则思维导图 核心理论 基于接口编程 “基于接口而非实现编程” - “Program to an interface, not an implementation”。 “接口”就是一组“协议”或者“约定”&#xff…

七大设计原则

一、七大设计原则 (1)单一职责原则 (2)接口隔离原则 (3)依赖倒置原则 (4)里氏替换原则 (5)开闭原则 (6)迪米特法则 &#xff0…

chrome浏览器截长图

使用chrome浏览器 打开开发者模式(更多工具->开发者工具) mac 按commandshiftp windows 按ctrlshiftp 然后输入capture 选择capture full size screenshot就可以了 截了个长图的例子

手把手教你截长图

1.截长图的工具 相信很多小伙伴在平时工作做都会碰见截图的问题,那正常的图,我们有各种方式去截取,例如:QQ的CtrlAltA,微信的AltA等等 但是呢,如果要用到长图的时候,就束手无策了,这…

python如何截长图_利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素)...

对WebElement截图 WebDriver.Chrome自带的方法只能对当前窗口截屏,且不能指定特定元素。若是需要截取特定元素或是窗口超过了一屏,就只能另辟蹊径了。 WebDriver.PhantomJS自带的方法支持对整个网页截屏。 下面提供几种思路。 方式一 针对WebDriver.Chro…

谷歌浏览器怎么截长图?

我们在使用电脑浏览网页的时候难免会需要进行一些长图的截取,而一般的截图只能实现一部分截取,那么我们要如何去实现这个操作呢?下面小编就给大家介绍一下怎么在谷歌浏览器上截长图的操作。 谷歌浏览器网页截长图怎么截? 1、进入C…

html2canvas截长图

github链接 一、下载运行后选择下图的html2canvas即可直接去到路由界面测试 二、下图是html2canvas路由页面,点击右上角的生成图片即可下载长图 三、源码路径(html2canvas源码github) 四、源码(关键在generateImage 这个方法&…

selenium+phantomjs截长图踩坑

目录 需求背景: 调研 phantomjs selenium 服务器部署 需求背景 BI上的报表需要设置定时任务截图发邮件到订阅人的邮箱中。刚开始以为截图的活是前端的,后来发现使自己的锅。 调研 截图的研究了一下,主流应该是 selenium 和 phantomjs。…

microsoft edge怎么截长图_实用技能 | Fireshot 网页截长图工具

FireShot 网页截长屏插件 网页截图有没有什么好方法? 在我们平常的工作、生活和学习中,截图是我们最常用到的功能之一。小编平常用到的是QQ、微信、电脑自带的快捷截图功能以及红蜻蜓截图软件等。 但是在浏览网页时,这些工具功能出现了一个致命的缺点,看到一个长长的文章,…

snipaste怎么滚动截长图_如何截长图,这3种方法你用过吗?

在工作中,经常需要截长图,那在电脑上你一般是如何操作呢?本期Word妹与大家分享2种快速截图技巧。 1、借用QQ工具 在最新的QQ版本中有一个长截图按钮,点击之后直接拉动需要长截图的内容,最后点击完成即可。 2、借用FastStone Capture工具 FSCapture是绿色版本不需要安装,可…

计算机win7截长屏,电脑截长图【应对法子】

喜欢使用电脑的小伙伴们一般都会遇到win7系统电脑截长图的问题,突然遇到win7系统电脑截长图的问题就不知道该怎么办了,其实win7系统电脑截长图的解决方法非常简单,按照 1:打开要截图的WORD文档,点击左上角的另存为或者…

网页截长图

很多时候我们需要在网页上截长图,下面记录下谷歌浏览器截长图的步骤: 1.在浏览器的右上角处找到三个竖着的小黑点按钮,点击选择该按钮,选择更多工具–>开发者工具 2.点击开发者工具后会显示这样的一个小窗口 3.按下CTRLShif…

分享电脑中截图的五种方法(包括截长图)

💂 个人网站:【 海拥】【弗莱迪的物理实验】【开发文档导航】🤟 风趣幽默的前端学习课程:👉28个案例趣学前端💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼小组】💬 免费且实用的计算机…

截长图方法

有的时候,我们可能需要截一个网站或者一些内容的图片,但屏幕不够大,出现滚动条,这时候我们就可以使用截长图的方法来达到截取整个网页的内容。 截长图方法有很多,以下介绍两种我所知道的截长图方法。 第一种方法&…

html5中框架怎么写,HTML5常用框架

HTML5常用框架 前言 随着HTML5规范的不断完善,围绕着这一生态有很多实用的框架,极大的提高了我们的开发效率,常见的框架代表有:UI层面的有Bootstrap、Yui、JqueryUI、CSS3Lib等,JS层面的有JQuery、Zeptojs、Angularjs、…

HTML框架构建

HTML框架构建 1、划分框架 A、使用标签决定如何划分框架.必须要有标签设定每个小窗口的网页,该标签中有src属性为每个URL值指定一个HTML文件(这个文件必须事先做好) B、标签常用的属性 属性描述cols用“像素数”或“%”分个左右窗口&#xf…

7个HTML5移动开发框架,初学HTML5必看

1、IONIC IONIC是目前最有潜力的一款HTML5手机应用开发框架。通过SASS构建应用程序,它提供了很多UI组件来帮助开发者开发强大的应用。它使用JavaScript MVVM框架和 AngularJS来增强应用。提供数据的双向绑定,使用它成为Web和移动开发者的共同选择。即将…

HTML5学习之常见的HTML5框架有哪些

HTML5简单易学门槛低,是Web时代前端开发最好用的工具。而HTML5开发人员的就业薪资也远远高于其他行业,资料显示,初级HTML5开发人员的平均薪资在8K-10K左右,拥有一定工作经验的人薪资普遍达到15K-20K。如此广阔的前景当然吸引了无数…

html框架frame

示例1&#xff1a; a.html <html> <frameset cols "50%,*"> <frame name "frame1" src "b.html" noresize> <frame name "frame2" src "c.html"> </frameset> </html> 注意&am…

HTML的框架

页面一般由三部分组成&#xff0c;分别是HTML&#xff08;超文本标记语言&#xff09;&#xff0c;CSS&#xff08;层叠样式表&#xff09;和JScript&#xff08;活动脚本语言&#xff09;。 HTML是整个页面的结构&#xff0c;相当于整个页面的框架。带"<","…