SOLID原则(转载)

SOLID原则(转载)SOLID 原则其实是由面向对象的五大设计原则组成 也是各种设计模式的基础理论 适当遵守 SOLID 原则 能写出高内聚 松耦合的代码 便于当需求变动能更快的拓展 废话不多说 下面立即正片 原则名称英文原义中文含义 SingleRespon andonlyone reasontochan 单一责任原则 OpenClosedPr

SOLID原则其实是由面向对象的五大设计原则组成,也是各种设计模式的基础理论。适当遵守SOLID原则,能写出高内聚,松耦合的代码,便于当需求变动能更快的拓展。废话不多说,下面立即正片。

原则名称 英文原义 中文含义
Single Responsibility Principle A class should have one, and only one, reason to change. 单一责任原则
Open Closed Principle You should be able to extend a classes behavior, without modifying it. 开放封闭原则
Liskov Substitution Principle Derived classes must be substitutable for their base classes. 里氏替换原则
Interface Segregation Principle Make fine grained interfaces that are client specific. 接口分离原则
Dependency Inversion Principle Depend on abstractions, not on concretions. 依赖倒置原则

没错,S.O.L.I.D原则就是这五个原则的首字母简称,从气势来看就觉得很“结实”,下面就简单介绍各个原则的含义。

单一责任原则

当需要修改某个类的时候原因有且只有一个。原义就是这样,简单来说就是一个类只尽自己所责,不瞎掺和其他功能,因此只会因为 一个功能 的问题而修改一个类。这样做的好处是一个功能出问题了,调试或者更改时可以完全不会影响到另外有一个功能的执行。

开放封闭原则

当系统需要增加新功能的时候,我们应该在原基础上进行拓展,而不是从零开始把之前的代码都修改了。其实这个原则在继承中得到体现,比如由抽象的鸟类,下面的蜂鸟,金丝雀等都继承鸟类这个类,当出现新的鸟物种时,应当在由鸟类的基础上进行继承然后在子类进行拓展的,而不是因为新物种的特性而修改父类。总而言之,对拓展是开放的,对修改是封闭的 。这样做的好处是完全不用担心影响之前运行良好的代码,放心拓展!

里氏替换原则

用到父类实例的地方,把父类实例替换成子类实例应当时 无缝替换 ,照样能跑通的。之后的依赖倒置原则会告诉我们具体的东西应该依赖抽象,具体的东西(如客户端,展现层)在使用具体服务时,应当时使用父类实例,然后根据多态来真实用到子类的功能,如果不按里氏替换原则来的话,当客户端用到服务时,还要根据子类的具体情况进行调整,这样子类需要修改时,就要改两处(子类和客户端),不便修改。因此需要做到用到父类的地方,换成子类照样无缝替换,这样如果功能出问题了,我们第一反应是只要修改子类即可!

接口分离原则

接口分离原则就是当一个类实现了一个接口后,接口里面的方法都是对这个类有用的,不存在方法体为空来实现(强迫实现)。就是说,一个接口不要太过臃肿,应该粒度更细 ,因为如果接口太过臃肿,可能导致实现类实现了不属于它自己责任的方法从而违反了单一责任原则。

依赖倒置原则

具体类应该依赖抽象类,高级代码 应当也依赖抽象类 ,而不是依赖低级代码。首先先来说下,高级代码和低级代码都是具体类,其中低级代码指提供基础实现的代码,比如读写文件类,图片上传类,但是他们是具体,比如这个图片上传类是将图片上传到七牛的。其中高级代码是涉及到业务逻辑的代码,如需要用到图片上传用作头像的业务代码。这样就有个问题了,明显高级代码依赖低级代码嘛,不依赖低级代码似不似傻?但是假如有一天七牛上传图片崩了,你需要换其他图片上传服务,但是由之前高级代码依赖低级代码,所以高级类里面全tm都是低级类的片段,想想改起来就觉得可啪!!因此假如一开就依赖抽象,那样就能利用多态灵活更改了。

总结

遵守好的设计理念,不一定做出好的产品。但是用不好的设计,肯定做不出好东西!

设计模式以及理念这东西,应该是理解本质后灵活使用的,而不是死记硬背,不然死记硬背的东西,到时候实操起来也不会第一时间想到使用!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229792.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午3:52
下一篇 2026年3月16日 下午3:52


相关推荐

  • 怎么用python画圆的公式_运用python 画圆[通俗易懂]

    importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.patchesimportPolygonimportmatplotlib.patchesasmpatchesfig=plt.figure(figsize=(16,8))ax=fig.gca()ax.set_xlim(-5,18)ax.set_yl…

    2022年4月14日
    46
  • TransactionScope事务处理

    TransactionScope事务处理在我们日常开发的时候,有时候程序需要使用到事务,就比如,我们日常最熟悉的一个流程,那么就是银行的取款,当用户从ATM机器选择取款1000元的时候,恰巧这个时候如果停电,如果没有事务那么将会出现不堪设想的后果,银行都会倒闭。最近在开发一个功能,需要根据单据的信息生成2张单据,要么全部保存,要么都保存失败,做到事务的一致性、原子性,一开始我想到的是SQL和存储过程级别的事务,但是好像按照当前的系统的业务逻辑,这个方法的底层还是拼接SQL语句,后面又想着使用C#的ADO.NET级别的事务,根据数据生成sql,但

    2022年7月19日
    19
  • wireshark过滤语法总结[通俗易懂]

    wireshark过滤语法总结[通俗易懂]做应用识别这一块经常要对应用产生的数据流量进行分析。抓包采用wireshark,提取特征时,要对session进行过滤,找到关键的stream,这里总结了wireshark过滤的基本语法,供自己以后参考。(脑子记不住东西)wireshark进行过滤时,按照过滤的语法可分为协议过滤和内容过滤。对标准协议,既支持粗粒度的过滤如HTTP,也支持细粒度的、依据协议属性值进行的过滤如tc

    2022年7月13日
    23
  • 自用分享|我手机的22个免费Ai软件

    自用分享|我手机的22个免费Ai软件

    2026年3月15日
    2
  • Java 手写签字去除背景 背景透明「建议收藏」

    Java 手写签字去除背景 背景透明「建议收藏」Java 手写签字去除背景 背景透明/** * 白底照片去除白底 形成透明底图片 * @param file 需要去除背景的图片 * @param Path 去除背景后保存图片的路径 * @return true 则去除成功 ,false 则失败 */public static boolean localImgToAlpha(File file, String Path) { try { BufferedImage bi = ImageIO.read(new F

    2022年8月19日
    9
  • w ndows无法连接到System,Windows无法连接到System Event Notification Service服务解决方法…[通俗易懂]

    w ndows无法连接到System,Windows无法连接到System Event Notification Service服务解决方法…[通俗易懂]采用windows7操作系统的电脑在开机时提示“Windows无法连接到SystemEventNotificationService服务”(如下图)的解决方法:操作系统:Windows7旗舰版32位。(根据网上资料,本文的方法同样适用于:WindowsVista)问题描述:今晚开机,电脑自检时没什么问题,但输入登入密码后,等待了N分钟(非常的慢,硬盘指示灯也不怎闪烁,都以为死机…

    2022年5月14日
    150

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号