【发布时间】:2022-02-08 01:51:16
【问题描述】:
我试图了解使用接口有什么好处,以便知道何时以及如何使用它们。互联网上的大多数资源都是相对肤浅的,解释了接口是如何工作的,但现在为什么要使用它们,当我查找名义问题时,我没有得到任何结果告诉我接口的目的是否超出了多态性和多重继承。
我的推理是,如果一个接口只被一个类继承,那它就没有用了,而当一个接口被多个类继承时,除非它用于多态性,否则它没有任何区别,并且唯一实现的东西与扩展不同的是多重继承。
如果我确定他们的目的仅限于此,我会对我的设计决策更有信心,如果我知道了此之外的目的,它将填补我的知识空白。我使用了设计模式标签,因为可能有一种设计模式以一种明显超越单纯多态性或多重继承的方式使用接口。
【问题讨论】:
-
多重继承的“另一面”是接口提供的契约。例如,
List接口没有提供任何值得由其实现类继承的实现(使多重继承成为一个相当薄的目标)。交易是您将有许多类根据不同的属性表现,但遵守相同的“列表”合同。这样,契约式设计可以为 API 开发人员和 API 调用者/消费者提供可靠的契约,同时允许他们松散耦合。 -
@ernest_k 接口(相对于其他任何可能包含方法的东西)是否有任何东西可以让合同设计变得更容易?我认为契约式设计主要是为了确保遵循封装以防止方法被篡改。
-
严格来说,没有那么多。接口提供了一种“类型”的契约。按合同设计的范围远不止于此(包括方法签名、异常和各方声明/承担的责任)......无论如何,这就是我的理解。事实是,接口使您能够拥有为您提供多态性的合同(在相同类型的意义上,不同的实现)是按合同设计的有效工具,imo。你读过这个programming to an interface question吗?
-
@ernest_k 谢谢!我开始看到使用接口作为更容易修改的更有条理的代码的工具。也许从简化的角度来看,它们只是关于多态性,但这种只关注功能的观点会忽略设计动机。我喜欢这种针对整个类型而不是单个方法的合同的想法。根据该抽象组织代码似乎是创建接口的一个很好的动机。这个链接很有帮助。
标签: java oop design-patterns