【发布时间】:2017-11-28 20:05:42
【问题描述】:
我最近回顾了一些春季项目。 我在某些项目的 dao 和服务层中看到了一些为一个类创建的接口。
像这样:
public interface EmployeeDao(){
//some methods declaration
}
public class EmployeeDaoImp implements EmployeeDao (){
// methods overriding
}
public interface CompanyDao(){
//some methods declaration
}
public class CompanyDaoImp implements CompanyDao (){
// methods overriding
}
在这种情况下不需要多态。
为什么我们需要这些接口?,这些有什么好处?
我希望我能表达自己。
【问题讨论】:
-
优势通常在于,如果您更改底层数据库(例如,使用 NoSQL 数据库而不是 MySQ),那么您可以更改 impl 而无需更改代码的其他部分。即使您在生产中只有一个 impl,能够在单元测试中模拟出一个 impl 也是有用的,并且接口在这方面可能比具体类更好。
-
另一个优点是您可以为多个派生对象提供一个“基本”接口并在不同的上下文中使用它,即您可以创建一个与 CompanyDao 分开的 EmployeeDao 列表。或者您可以使用“instanceof”对对象进行排序,或者其他。即使接口中没有任何功能。
-
哎呀...我想我可能对您的问题有所不同...您的问题是关于“为什么为空接口”或“为什么只有 1 个实现的接口”?
-
你不需要它,你不需要。优点,测试一个接口比一个类更容易模拟。在运行时使用接口时,您可以使用 JDK 动态代理而不是基于 cglib 的类代理(因此您可以依赖 JDK 原生的东西而不是其他库)。也可以通过接口隐藏实际的实现,使用类的用户可以看到实现的细节。我倾向于保护实际的实现包(这样可以防止泄露实际的实现)。
标签: java spring interface polymorphism