关于编程:5-幅插图-让你轻松看懂面向对象编程的SOLID原则

如果你相熟面向对象的编程,那么可能曾经据说过SOLID原理。
SOLID是针对面向对象编程和设计的五大依赖关系治理,每个字母代表另外一个三个字母的首字母缩写,用来形容一个准则。这五项软件开发准则是构建软件时要遵循的准则,以便于零碎扩大和保护。这项准则失去软件工程师Robert C. Martin的同意。
在其余网站上有太多对于SOLID的精彩文章,但我很少看到带有图片的示例,这使得像我这样青睐用图片记忆的人在学习上变得有些艰难。
因而,本文的次要目标是通过插图强调每种原理的指标,帮忙大家更好地了解这些原理。
你可能会看到,其中一些准则看起来很类似,但它们的指标并不相同。 留神!你大能够违反一个准则来满足另一个准则。
为了使此操作更简单明了,我将应用“Class”一词,但请留神,本文中它也能够作为主体利用于函数、办法或模块。
当初,让咱们开始吧!
S —Single Responsibility(繁多责任)
Class应负繁多责任。

图释:

  • 谬误示范——我是一名厨师、园丁、画家和司机;
  • 正确做法——四个Class别离负责厨师、园丁、画家和司机。

如果一个Class承当许多职责,便会减少产生谬误的可能性,因为对其中一个Class进行更改可能会在您不知情的状况下影响其余角色。
指标:该准则旨在辨别变量,以防因为更改而产生谬误,这样当前批改就不会影响其余无关的行为啦。
O —Open-Closed (开闭)
Class该当在凋谢的时候进行编程扩大,关闭的时候进行批改。

图释:

  • 谬误示范——我能做”Cut”这个动作->关闭后-> 批改成能做”Paint”;
  • 正确做法——我能做”Cut”这个动作->关闭后->扩大成能做”Cut”和”Paint”两个动作。

更改Class的以后行为将影响应用该类的所有零碎。
如果要让Class执行更多功能,现实的办法是将性能增加到曾经存在的性能中,而不是间接更改Class。
指标:该准则旨在扩大Class的性能,而不扭转特定Calss的现有性能。这是为了防止在应用Class的任何中央引起谬误。

L — Liskov Substitution(替换)
如果S是T的子类型,则能够将程序中类型T的Class替换为类型S的Class,这样就无需更改总程序内的任何所需属性。

图释:
有一对父子Sam和Eden,有人心愿Sam 做一杯咖啡

  • 谬误示范——父亲Sam不在场时,工作便生效;
  • 正确做法——继承工作给儿子Eden。

当子类无奈执行与其父类雷同的操作时,可能会导致谬误。
如果您有一个类并从中创立另一个类,则该类将成为父类,而新的类将成为子类。 子类应该可能执行父类能够做的所有事件。此过程称为继承。
子类应该可能解决与父类雷同的申请并提供雷同的后果,或者它能够传递雷同类型的后果。
图中父类提供咖啡(能够是任何类型的咖啡)。 子类交付Cappucino是能够承受的,因为它是一种非凡的咖啡,然而交付水是不可承受的。
如果子类别不合乎这些要求,则意味着子类别已齐全更改,并违反了这一准则。
指标:该准则旨在增强一致性,以便能够以雷同的形式应用父类或其子类,而不会呈现任何谬误。

I —Interface Segregation(接口隔离)
不应强制客户依赖他们不应用的办法

图释:

  • 谬误示范——用凌乱的办法去作排列 -> 无奈应用;
  • 正确做法——用简洁的办法去作排列 -> Awesome!

当要求一个Class执行无用的操作时,这是节约的,并且如果该Class没有能力执行那些操作,则可能会产生意外的谬误。
Class应仅执行其职责所需的操作。如果未来其余Class可能会负责到其余任何动作,则应将其彻底删除或移至其余地位。
指标:该准则旨在将一组动作分成较小的一组,以便Class仅执行其所需的一组动作。

D —Dependency Inversion(依赖倒置)

  • 高级模块不应依赖于低级模块,两者都应取决于abstraction;
  • abstraction不应依赖细节,细节应取决于abstraction。

图释:

  • 谬误示范——我用特定工具来工作;
  • 正确做法——我用任何给我的工具来工作。

首先,让咱们更简略地定义此处应用的术语:

  • _高级模块(或Class)_:应用工具执行动作的Class;
  • _低级模块(或Class)_:执行操作所需的工具;
  • _形象abstraction:_示意连贯两个Class的接口;
  • _详细信息_:该工具如何工作。

该准则表明,不应将Class与用于执行动作的工具交融在一起。而是应将其与容许工具连贯到Class的接口交融。
它还阐明,Class和接口都不应该晓得工具的工作形式。然而,该工具须要满足接口标准。
指标:该原理旨在通过引入接口来缩小高级模块对低级模块的依赖性。
总结
到目前为止,咱们曾经探讨了这五个准则并突出了它们的指标。它们将帮忙你使代码易于调整、扩大和测试,达到完满的境界。
最初,非常感谢你的浏览。 我心愿你能对这个主题造成一个更好的概念,并且浏览时和我编写代码时一样开心。
????原文链接:https://medium.com/backticks-tildes/the-s-o-l-i-d-principles-in-pictures-b34ce2f1e898
以上信息来源于网络,由“京东智联云开发者”公众号编辑整理,不代表京东智联云立场

[浏览原文]

评论

发表回复

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

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理