OCP(开闭原则)与IoC(控制反转)有什么关系?

How is OCP (Open closed principle) related to IoC (Inversion of Control)?

我能想到的一个例子是模板模式,它​​是一种实现 IoC 的方式,也是 OCP 的一个例子。因为在模板模式中 我们定义了基本算法,它不能被子 classes 更改,但可以覆盖该算法的继承步骤方法。所以将来如果我们 想要改变一个步骤的实现,我们可以创建另一个子 class 并实现这些步骤。

还有其他例子吗?

开闭原则建议您应该更喜欢具有可扩展行为的东西,这样当您需要它们做新事情时就不必修改它们的源代码。

如果操作得当,控制反转同时是提供这种可扩展性的最简单和最强大的方法。

这是最简单的方法,因为当您为 IoC 定义可注入接口时,您只捕获您的需求。配置可扩展行为的其他方法需要您考虑消费者可能想要的一切。

这是最强大的方式,因为代码可以做任何事情,提供一个IoC扩展点可以让消费者做各种你想不到的事情,只要它们满足您的界面定义的要求。同样,这是因为注入的接口仅捕获您自己的需求。

所以,OCP 和 IoC 之间的联系非常简单:OCP 是目标,IoC 是实现目标的手段。