很抱歉,如果之前已经询问/回答了这个问题,但我不确定如何正确地制定它,因此我的搜索可能措辞不当。
我正在使用Java构建一个Paint应用程序作为赋值。我决定使用“插件”类型的方法来做到这一点。主要的应用程序在功能方面提供的很少,但是动态类加载和注册不同的插件等。本质上,这允许我添加不同的组件,而不必将任何东西硬编码到主程序中:存在一个LoadComponents()方法,它找到子包中的所有不同插件并加载它们。这非常有效。
然后,每个组件负责使用核心应用程序的JFrame创建和注册它的UI元素,以及实现自己的EventListener。到目前为止,所有这些都很有效。
这是我的问题:我有一个JPanel,我用它作为Canvas,它显然实现了paintComponent()方法,以便进行实际的绘制。它包含在核心应用程序中,因此提供了非常微薄的功能。随着不同组件的添加,我想为基础Canvas类添加越来越多的功能,但我似乎找不到一个好的,干净有效的方法。
目前,我能想到的只是创建Canvas的子类来继承它的功能。但是,为了使用当前的方法,在运行时动态加载插件和功能,我需要提供一个setCanvas()方法,这样我就可以覆盖实际UI中的基本Canvas类引用,我,不是很有效也不是常见的做法。
还有一个问题是多个插件向基础Canvas类添加功能,然后找出哪个应该先行。
非常感谢有关此事的任何想法,建议或意见。
答案 0 :(得分:1)
我认为“插件”这个术语要么不是你正在做的,要么不是这个应用程序的最佳设计路径。
我相信你想要的一个命令模式,其中UI组件将“命令”发送到“画布”,它绘制(并不断重新绘制)每个命令。因此,每个绘制UI项必须能够创建命令,但“画布”不必知道它来自何处。