在API和软件核心之间交换变量

时间:2018-01-09 22:48:26

标签: java plugins add-on

我正在开发一个可以从JAR加载插件的截图软件。 Thoses是使用API​​包开发的,它由实现的接口组成,因此想要制作插件的人不必使用完整的源代码。

这适用于添加类似操作(例如,上传到X或X主机),但如果我想以相反的方式发送变量,例如从插件到核心,该怎么办?我该怎么做?

我能想到的唯一解决方案就是使用回调,但我不觉得这么干净......

顺便说一句,我的解决方案是使用devs实现的接口,然后我实现了正确吗?还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

您的解决方案是实施此类方案的最常用方法。您为插件提供了一个类的实例(由核实例化),并且它们可以存储它以供将来使用(例如,将数据传递到核心或触发另一个操作)。通常,这些类的名称以Context结尾(例如BundleContext,PluginContext等)。

另一种模式是使用一种Mediator类。具有一些静态方法的类,插件可以使用这些方法将一些数据发送到核心或触发某些操作。我不喜欢它,它不是一个非常干净的解决方案,但它使插件开发人员更容易访问API,因为他们不需要存储上下文实例并尊重其生命周期。此模式在IntelliJ IDEA架构中广泛使用。

在开发基于插件的系统时,我强烈建议您查看OSGi架构和API。在这方面它可能会有所帮助。