java - api中接口(interface)与实现分离

标签 java api

我正在编写一个围绕 jUnit 构建的框架,用于在 Java 中编写测试脚本。

它是基于任务的,每个任务都是按顺序执行的。这是一个简化的 View :

所有任务使用的接口(interface)看起来像

public interface Task {
    void run(Callback callback);
}

Callback 接口(interface)为任务提供了一种方式来告诉执行者它已经完成。

public interface Callback {
    void done();
    void failed(String wtf);
}

我还为用户提供了执行器接口(interface)、外部(物理)接口(interface)和设置类。我称之为运行时环境,并且是抽象实现的:

public abstract class RuntimeEnvironment {
    void execute(Task task) { ... }
    void schedule(Task task, long delay) { ... }
    SomeExternalInterface external();
    Settings settings();
}

其中 SomeExternalInterfaceSettings 是框架和实现用户都使用的接口(interface)。

框架可能会使用Settings 中的threadPoolSize 成员,以及SomeExternalInterface 中的'intialize()' 和'cleanUp()' 等成员。

这个类传递给任务的方式目前是通过实现任务类的构造函数。我不喜欢这个。与在 Task 接口(interface)中指定 RuntimeEnvironment

相比,它会产生模棱两可的 api

为什么不把它添加到你问的任务界面呢?喜欢

public interface Task {
    void run(Callback callback, RuntimeEnvironment runtime);
}

因为,运行 runtime.settings().getThreadPoolSize() 很好(因为它在界面中指定),但是如果用户希望能够获得 runtime.settings 怎么办().getWonkyTimeUnit()runtime.external().attemptToDefuseImminentExplotion() 他或她在各自接口(interface)的实现中指定了什么? runtime.settings() 返回接口(interface),而不是实现类。

所以...

如何允许 api 用户指定他(或她)自己的实现而不影响 api 的通用性和明确性?

最佳答案

您可以允许使用字符串获取/设置自定义设置:runtime.settings().set("wonky_time_unit"); 这样用户就可以添加任意数量的属性,他们将通过设置界面可用:runtime.settings().set("attemptToDefuseImminentExplotion") = true;

关于java - api中接口(interface)与实现分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11291458/

相关文章:

java - 为什么 Intellij IDEA 无法识别 ResourceBundleMessageSource 类的 defaultEncoding 字段?

objective-c - Objective-C 的 Web API 介绍?

.net - 在运行时检查.NET堆

PHP 连接到 MediaWiki API 并检索数据

wordpress - 在您的 API key 上配置错误

java - 为什么发出终端操作后 Java close() 不流式传输?

java map dot put 无法在 for 循环中工作

java - 使用 StreamSupport 库时 Dex 失败

javascript - react 类型错误未定义

java - Java播放的24位音频不正确