开发人员应该知道的SOLID 原则

开发人员应该知道的SOLID 原则

SOLID 原则

如果熟悉面向对象编程,可能听说过SOLID原则。

通过插图更好地理解这些原则,并强调每个原则的目标

您会看到,其中一些原则可能看起来相似,但它们的目标不同。有可能在满足一个原则的同时违反另一个原则,即使它们是相似的。

为了简单起见,我将使用“类”这个词,但请注意它也可以应用于本文中的函数、方法或模块

更新*

我收到了一些关于本文中的 Open Closed 违反单一职责原则的评论。请注意,本文的目的是独立地解释这些原则中的每一个。 此外,职责(或角色)与行动不同。在 SRP 中,我使用了“I am Painter”,在 Open-Closed 中,我使用了“I can Paint”。 重要的是要注意这一点,因为可以执行多个操作来履行职责(或角色)。该类应该有一个责任(SRP),但其履行该责任的功能应该对扩展(OCP)开放。

现在,让我们开始吧!

坚实的原则

S——单一职责

一个类应该有一个单一的职责

如果一个类有很多职责,它会增加错误的可能性,因为更改其职责之一可能会在您不知情的情况下影响其他职责。

目标

该原则旨在分离行为,以便如果由于您的更改而出现错误,它不会影响其他不相关的行为。

O – 开闭原则

类应该对扩展开放,对修改关闭

更改类的当前行为将影响使用该类的所有系统。

如果您希望类执行更多功能,理想的方法是添加到已经存在的功能而不是更改它们。

目标

这个原则旨在扩展一个类的行为而不改变该类的现有行为。这是为了避免在使用类的任何地方引起错误。

L – 里氏替换原则

如果 S 是 T 的子类型,则程序中 T 类型的对象可以被 S 类型的对象替换,而不会改变该程序的任何所需属性。

子类不能执行与其父类相同的操作时,这可能会导致错误。

子类应该能够处理相同的请求并传递与父类相同的结果,或者它可以传递相同类型的结果。

图片显示父类交付咖啡(它可以是任何类型的咖啡)。儿子可以制作卡布奇诺,因为它是一种特定类型的咖啡,但不能送水。

如果子类不满足这些要求,则意味着子类被彻底改变,违反了这一原则。

目标

该原则旨在强制一致性,以便可以以相同的方式使用父类或其子类而不会出现任何错误。

I -接口隔离

不应强迫客户依赖他们不使用的方法。

接口隔离原则表明客户端不应该被强迫实现一些他们不会使用的接口,应该把胖接口中的方法分组,然后用多个接口替代它,每个接口服务于一个子模块。简单地说,就是使用多个专门的接口比使用单个接口要好很多。

目标

这个原则旨在将一组动作拆分成更小的集合,以便一个类只执行它需要的一组动作。

D -依赖倒置

– 高级模块不应依赖于低级模块。两者都应该依赖于抽象。 – 抽象不应依赖于细节。细节应该取决于抽象。

首先,让我们更简单地定义这里使用的术语

高级模块(或类):使用工具执行操作的类。

低级模块(或类):执行操作所需的工具

Abstraction:表示连接两个类的接口。

开闭原则(OCP)是面向对象设计原则的基础也是整个设计的一个终极目标,而依赖倒置原则(DIP )则是实现OCP原则的一个基础,换句话说开闭原则(OCP)是你盖一栋大楼的设计蓝图,那么依赖倒置原则就是盖这栋大楼的一个钢构框架。

目标

该原则旨在通过引入接口来减少高级类对低级类的依赖。

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月21日
下一篇 2022年6月21日

相关推荐

  • 博客模板(博客模板之家)

    2控制面板定制我的首页点添加模块点选创建好的模块标题勾上并保存,移动新建面板位置保存设置我们做这一步的目的是将建立好的模块在博客个人首页里呈现出来补充说明最喜欢的熙越的PP的地址如…

    2022年10月31日
  • 粉刺也是类型的?悟空祛痘的亚健康管理对这些粉刺有效吗?

    粉刺是什么?粉刺其实就是痤疮。痤疮是毛囊、皮脂腺的一种慢性炎症性皮肤病,也是美容皮肤科最常见的病种之一。通常好发于面颈部、胸背部、肩膀和上臂。在临床表现中,痤疮经常以微粉刺、白头粉…

    2022年8月21日
  • Nature发表空间seq技术,捕获空间表观遗传信息

    组织中的细胞功能取决于它们所在的局部环境。空间转录组学的出现让基因组规模的基因表达映射成为可能,但缺乏在细胞水平和基因组规模上捕获空间表观遗传信息的能力。 如今,来自耶鲁大学和卡罗…

    2022年8月24日
  • 向“零碳”迈进,他们向世界讲述“中国方案”

    中青报·中青网记者 尹希宁 贾晓静 见习记者 袁洁 当人们谈论“零碳”时,究竟在谈论什么? 7月22日,世界青年发展论坛“气候变化和绿色发展”主题论坛在北京举行。多个国家的政府官员…

    2022年8月1日
  • 罗马诺:拜仁即将对德里赫特开新报价,尤文要价9000万~1亿欧之间

    直播吧7月16日讯 罗马诺消息,拜仁在出售莱万之后,已经开始着手下一笔转会操作。拜仁即将对德里赫特进行新的正式报价,尤文要价在9000万欧——1亿欧之间。 此外,拜仁还会继续追逐莱…

    2022年7月18日
  • 「探游报告」血腥萨姆《最后一个地球人》评测报告-适用4.0版

    近期搜索了一下独立游戏,评分在8分以上,排名靠前且以像素风为主的还真不少,《最后一个地球人》就是其中之一,目前大众评分普遍在8.3-8.7分以上,版本更新至4.01版,游戏体量几百…

    2022年6月30日
  • 《魔兽世界》10.0强势职业有什么?10.0强势职业介绍

    wow10.0强势职业有什么?很多玩家还不清楚10.0强势职业有什么,其实强势职业还是很多的,很多玩家还不清楚具体的强势职业排名。下面一起来看一下小编带来的魔兽世界10.0强势职业…

    2022年10月28日
  • Android 开发者进阶的“丝绸之路”,万人踩坑晋升总结

    一、Java基础 1 . 面向对象的三大特性: Java 作为面向对象编程语言,你得知道OOP的的三大特性 封装、继承、多态。 2 . 程序设计的6大原则: 单一职责原则 里氏替换…

    2022年6月24日
  • 永劫民间厨艺大赛开启?火男第一无争议:不仅会颠勺,还能拍黄瓜

    只要是竞技类游戏,那就会有各种大大小小的赛事。一般来说游戏官方会有职业性质的联赛,也会在玩家之间开展一些趣味赛事,除此之外,玩家私下也会发起一些赛事,这些由玩家发起的赛事通常被称为…

    2022年7月7日
  • 微信小程序实现滑动操作

    示例简介 本文使用动画组件wx.createAnimation来实现滑动操作: 1、左滑动显示操作项区域; 2、点击操作项触发相应方法; 3、右滑动和点击行数据收起操作项; 4、点…

    2022年6月13日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息