Interface 开闭实体原理是否与接口编码相同?

Interface 开闭实体原理是否与接口编码相同?,interface,solid-principles,open-closed-principle,dependency-inversion,Interface,Solid Principles,Open Closed Principle,Dependency Inversion,打开以进行扩展和关闭以进行修改是否意味着接口的代码 如果我对一个接口进行编码,以便通过实现该接口来引入未来的具体实现,并且我们在不触及现有逻辑的情况下创建新类,它是否达到了我们尝试使用“开放用于扩展”和“关闭用于修改”实体原则来解决的相同目标?我想说,接口的代码解决了“开放-关闭”原则(OCP),但还有其他方法可以对接口进行编码 接口的代码也可能意味着向InputStream这样的抽象类编码 此外,CDI的使用还允许关闭bean进行修改,打开bean进行扩展 这意味着您不能使用接口,但可以使用接

打开以进行扩展和关闭以进行修改是否意味着接口的代码


如果我对一个接口进行编码,以便通过实现该接口来引入未来的具体实现,并且我们在不触及现有逻辑的情况下创建新类,它是否达到了我们尝试使用“开放用于扩展”和“关闭用于修改”实体原则来解决的相同目标?

我想说,接口的代码解决了“开放-关闭”原则(OCP),但还有其他方法可以对接口进行编码

接口的代码也可能意味着向InputStream这样的抽象类编码

此外,CDI的使用还允许关闭bean进行修改,打开bean进行扩展

这意味着您不能使用接口,但可以使用接口来使用OCP

如果我对一个接口(…)进行编码,它是否实现了(…)可靠的原则

是的,你遵循坚实的原则。但接口的实现者可能不会

通常,接口分为方法签名和javadoc。方法签名指定技术上可以做什么,javadoc应该指定实现应该做什么。在这两种情况下,签名和doc都是硬事实,违反签名或javadoc的实现大多应报告为bug

因此,您可以将现有接口用于常见需求,也可以将新接口用于特定需求。如果创建一个新接口,您可能会考虑接口隔离原则,它也是SOLID principle集合的一部分

如果您设计这个接口,您必须对实现者的需求开放。在示例中,如果接口如下所示:

Date readDate(InputStream in);
实施者可能会提出一些您无法预见的要求:

  • 在流关闭的情况下,应该添加IOException
  • 您应该添加一个字符集参数,因为字符集是ASCII,这意味着位长度是7位,而不是8位
  • 您应该添加一个时区,因为Date使用服务器的时区,而流源来自不同的时区
  • 您应该添加区域设置,因为年/月/日格式(UK)可以是不同区域设置中的年-月-日格式(GER)
  • 这些需求可能在编码到接口后出现。我想说,这些对接口的要求迫使您将代码修改为关闭的接口。您可以说,是的,这是一个违反closed for modifications的修改。但是这些“接口需求”中没有一个真正需要将代码的行为修改为接口