我能想到的一个示例是模板模式,它是一种进行IoC的方法,也是OCP的一个示例。因为在模板模式中,我们定义了基本算法,子类无法更改该算法,但是可以覆盖该算法的继承步骤方法。因此,将来如果我们想更改某个步骤的实现,可以创建另一个子类并实现这些步骤。
还有其他例子吗?
开闭原则建议您应该选择具有可扩展行为的事物,这样,当您需要它们进行新事物时就不必修改其源代码。
如果操作正确,则控制反转同时是提供这种可扩展性的最简单,最强大的方法。
这是 最简单的 方法,因为当您为IoC定义可注入接口时,您仅捕获需求。配置可扩展行为的其他方法要求您考虑消费者可能想要的所有内容。
这是 最强大的 方法,因为代码可以执行任何操作,并且提供IoC扩展点允许使用者执行您未曾想到的所有事情,只要它们满足您的界面定义的要求即可。同样,这是因为注入的接口仅捕获您自己的需求。
因此,OCP和IoC的联系非常简单:OCP是目标,而IoC是实现目标的手段。