您是否从可以实例化的任何类中提取接口?

时间:2016-02-26 00:18:18

标签: java oop composition

通常认为基于接口的应用程序的每个类(不包括域模型)都是一种好习惯吗?即使只在你的包中调用该类?

更新:根据评论,这是一个我能想到的示例场景,我觉得在基于界面的课程中做得很好。

enter image description here

我的父包中的Calculator类,进行一些计算并使用另一个类(打印机)将结果打印到文件系统。假设Calculator类是公共的,Printer类具有包保护。现在,如果我希望打印机通过HTTP发送结果而不是将其写入文件系统,该怎么办?

如果Printer类基于接口,并且我使用Spring注入Printer类。我本可以很容易地用新的实现换掉实现。

3 个答案:

答案 0 :(得分:1)

完全没有。

接口最适合用于计划提供各种多态实现的地方,或者您希望为了单元测试而反转依赖关系的地方。

只应在必要时创建接口。它们应该经过精心设计。

答案 1 :(得分:0)

它主要是一种设计选择。理论上,最好在实践中“编写接口”以使一切实现接口通常会导致额外的工作和类SomethingImpl ~Impl是一些冗余给定的implements关键字而不是非常描述实现

答案 2 :(得分:0)

当你明确想要在功能上指定一个类应该做什么时,应该使用IMO接口。通常情况下,当我预测在某个时刻包含接口的类需要不同的实现时,我会创建一个接口。只要其界面知道该怎么做,同一个班级并不关心如何完成任务。

"编程到接口"允许你插入"插入"使用Spring等运行时的不同实现,而功能规范保持不变。以战略模式为例。

另外,两个完全不同的类(没有继承)可以实现一个公共接口,如果在某些时候期望它们执行相同的操作/表现出相同的行为。

虽然您可能会为任何类提取接口,但可能没有理由一直这样做。