开放、封闭与单一责任

Har*_*iam 6 oop design-patterns solid-principles

我正在研究单一职责原则(SRP)和开闭原则(OCP)。

SRP 规定,一个类必须只有一个改变的理由。OCP 规定类必须对修改关闭,但对扩展开放。

我觉得这是矛盾的。一个原则规定类必须足够简单,您可以出于单一原因进行更改,但另一条原则规定类不得更改而只能扩展。

有人有更好的解释吗?

小智 3

单一职责原则涉及这样一个事实:如果一个类具有多个职责,并且这些职责位于单个类中,则这些职责将紧密耦合。因此,如果接口或算法因一种职责而发生变化,它也可能会影响另一种职责,这是一种不希望的效果。

在开放/封闭原则中,类应该能够扩展其行为,而不需要修改类本身。唯一需要修改该类的原因应该是因为它有错误/错误,而不是因为您想更改或添加功能。

例如(OCP):保存对象的硬编码类型列表的类不开放扩展,因为如果要将新类型添加到列表中,则需要修改该类。相反,更好的设计是类具有添加或删除功能,或者您可以实现一个接口来保存每个子类的不同类型。