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

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

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

有人有更好的解释吗?

最佳答案

单一职责原则处理这样一个事实:如果一个类有多个职责,如果它们在一个类中,这些职责将紧密耦合。
因此,如果接口(interface)或算法因一个职责而改变,它可能也会影响另一个职责,这是一种不希望的效果。

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

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

10-08 07:14