【问题标题】:Interface without polymorphism没有多态性的接口
【发布时间】: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


【解决方案1】:

Spring 大量使用接口,因为它们遵循“编程到接口而不是实现”的设计原则

Programming to an interface

【讨论】:

    猜你喜欢
    • 2011-02-20
    • 2016-09-12
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多