为什么只对一个类使用Java接口?

为什么只对一个类使用Java接口?,java,interface,software-design,Java,Interface,Software Design,我最近读了一些人的代码,他们创建了一个只由一个类实现的接口。在我看来,界面是不必要的。创建仅由一个类实现的接口有哪些设计原因?两个原因: 测试。在自动化测试过程中,实现接口的类可以很容易地被存根、模拟、包装等替换 未来的扩展。仅仅因为现在只有一个实现并不意味着没有计划或想象更多 他/她可能只是试图定义其他类可以扮演的角色,特别是如果以后添加更多的类。假设你有一个宠物界面。您可能有一个Dog和RoboDog类,它们以后都会实现该接口,即使它们可能来自不同的继承树。我同意,现在不需要它,但将来如果您

我最近读了一些人的代码,他们创建了一个只由一个类实现的接口。在我看来,界面是不必要的。创建仅由一个类实现的接口有哪些设计原因?

两个原因:

  • 测试。在自动化测试过程中,实现接口的类可以很容易地被存根、模拟、包装等替换
  • 未来的扩展。仅仅因为现在只有一个实现并不意味着没有计划或想象更多

  • 他/她可能只是试图定义其他类可以扮演的角色,特别是如果以后添加更多的类。假设你有一个宠物界面。您可能有一个Dog和RoboDog类,它们以后都会实现该接口,即使它们可能来自不同的继承树。

    我同意,现在不需要它,但将来如果您需要更改实现或要添加新行为,则无法管理更改

    变化是IT行业最大的因素。开发人员花费更多的时间在维护上,而不是在开发上


    您不想更改现有类的实现,因为它已经测试了很多年了。如果您更改它,那么它也将对相关类产生巨大影响,并且您必须从一开始就测试您的完整应用程序。它增加了回归问题。

    因为代码可以改进,如果以后编写另一个需要接口的类,这将使操作更容易。@Olayinka,为什么要将其作为注释而不是答案?@SimonT我猜太短了。下次我会记得作为答案发帖。如果你可以直接创建一座高层建筑,为什么你需要一个蓝图?@max777,类已经有点像蓝图了:P接口就像蓝图。我没有考虑测试方面。特别是考虑到接口名为Manager,类名为ManagerImpl,因此在这种情况下,未来的扩展对我来说意义不大。。。它是专门为这个接口创建的。并不是说他们仍然无法添加更多实现它的类。多亏了#2,我能够在几个小时内将基于rss的实现替换为基于json的实现#我帮助确保我没有弄坏任何东西。我想你误解了这个问题。并不是接口只能实现一次,而是程序员只创建了一个类来实现接口。