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)是你盖一栋大楼的设计蓝图,那么依赖倒置原则就是盖这栋大楼的一个钢构框架。
目标
该原则旨在通过引入接口来减少高级类对低级类的依赖。