开放封闭与单一责任

时间:2015-06-24 05:49:26

标签: oop design-patterns solid-principles

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

SRP声明一个班级必须只有一个改变的理由。 OCP声明该类必须关闭以进行修改,但可以扩展。

我觉得这是矛盾的。一个原则规定,类必须足够简单,你只需要改变一个原因,但另一个原则规定一个类不能改变但只能扩展。

有没有人有更好的解释?

2 个答案:

答案 0 :(得分:0)

单一责任原则处理的事实是,如果一个班级有多重责任,如果他们在一个班级中,这些责任将紧密耦合。 因此,如果某个界面或算法因一项责任而发生变化,则可能还会影响其他责任,这是一种不良后果。

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

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

答案 1 :(得分:0)

让我们用一个 2D 圆环来表示所有的责任和改变的原因。

SRP -> 要求我们切掉那个圆的边缘(哈哈),这样剩下的就非常紧密地耦合了,如果它会改变,它也会同时改变。

OCP -> 要求我们在那个圈子里戳洞,以便那些会以不同速度变化的部分可以在以后的日期提供。

换句话说,符合 SRP 的类别可能无法通过 OCP,而符合 OCP 的类别可能无法通过 SRP。两者之间也有显着的重叠,但我的演示也表明也会存在差异。

相关问题