gpt4 book ai didi

java - 为什么为每个类创建接口(interface)而不是其实现

转载 作者:行者123 更新时间:2023-12-01 06:33:36 26 4
gpt4 key购买 nike

这似乎是标准,所以到目前为止我一直在遵循它,但现在我正在从头开始构建一个新类,而不是修改旧类,并且觉得我应该理解为什么我应该遵循项目约定。

几乎每个类都有一个名为classnameable的接口(interface)。在代码中,database.class 永远不会出现一次,但在我想要使用该类的地方,我会看到 databaseable.class

据我了解,接口(interface)是一个从未实现但继承以保持标准的类。那么为什么这些接口(interface)被当作真正的类来使用呢?

最佳答案

To my understanding an interface was a class that was never implemented but was inhereted from to keep standards. So why are the interfaces being used as if they were real classes.

这有点困惑。接口(interface)定义了 API,以便来自不同作者、模块或项目的代码片段可以交互。例如,java.util.Collections.sort() 可以对实现 List 接口(interface)并包含实现 Comparable 接口(interface)的对象的任何对象进行排序 -即使在编写排序代码时实现类可能还不存在!

现在,您的项目中的情况似乎反射(reflect)了一种不幸且相当常见的反模式:所有东西都有一个接口(interface),大部分都具有单个实现类,甚至对于内部类也是如此。

测试驱动开发(TDD)的支持者曾经大力提倡这一点,他们认为能够独立测试每个类,并将其所有依赖项替换为模拟对象,这一点至关重要。旧的模拟框架只能模拟接口(interface),因此为了能够单独测试每个类,所有类间依赖关系都必须通过接口(interface)。

幸运的是,较新的模拟框架可以模拟具体的类,并且不需要您用不必要的接口(interface)污染您的项目。有些人可能仍然会认为无论如何都应该“减少耦合”,但在我看来,他们只是在合理化他们不改变做法的愿望。

当然,如果您不采用原教旨主义 TDD,那么就没有充分的理由为所有事物提供接口(interface) - 但为某些事物提供接口(interface)却是非常充分的理由。

关于java - 为什么为每个类创建接口(interface)而不是其实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7009960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com