Java OCP(开闭原理)与IoC(控制反转)有何关系?

Java OCP(开闭原理)与IoC(控制反转)有何关系?,java,design-patterns,inversion-of-control,solid-principles,open-closed-principle,Java,Design Patterns,Inversion Of Control,Solid Principles,Open Closed Principle,我能想到的一个例子是模板模式,它是实现IoC的一种方式,也是OCP的一个例子。因为在模板模式中 我们定义的基本算法不能被子类更改,但可以覆盖该算法继承的step方法。所以将来如果我们 要更改步骤的实现,我们可以创建另一个子类并实现这些步骤 还有其他例子吗?开闭原则建议您应该更喜欢具有可扩展行为的东西,以便在需要它们做新事情时不必修改它们的源代码 如果您做得正确,控制反转同时是提供这种可扩展性的最简单和最强大的方法 这是最简单的方法,因为当您为IoC定义一个可注入接口时,您只捕获您的需求。其他配置

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


还有其他例子吗?

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

如果您做得正确,控制反转同时是提供这种可扩展性的最简单和最强大的方法

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

这是最强大的方式,因为代码可以做任何事情,而提供IoC扩展点可以让用户做你想象不到的所有事情,只要他们满足你的接口定义的需求。这也是因为注入的接口只捕获您自己的需求


因此,OCP和国际奥委会有着非常简单的联系:OCP是一个目标,而国际奥委会是实现这一目标的手段。

我认为你的思路是正确的。考虑额外的IOC模式,以及它们是否都有助于OCP,原因与您所描述的相同。例如,依赖注入如何?和的标记wiki中给出了一些历史上下文。