如何让Java GUI完全独立于Core
我正在开发一个项目。我试图实现核心作为独立的jar文件,可以从命令行甚至Windows服务运行。核心部分负责跟踪几个文件并发送一些通知邮件。问题是,保持GUI完全独立的最好方法是什么?如何让Java GUI完全独立于Core
的GUI需要下列互为作用与核心文件的
- 发送列表
- 接收来自核心关于多少这些文件已被处理的通知
- 收到有关文件状态通知即送/加工/在GUI中显示失败等信息
- 收到来自核心的入局消息的信息
我有用Delphi和C开发的这个软件.C被用来编码核心逻辑和使用Windows消息和回调,我在C DLL /服务上注册了Delphi GUI。我很困惑如何在java中实现它。
- 观察者模式?
- 核心与gui之间的小型客户端/服务器通信?
P.S: 我在这里讨论的原因是在Java中编写代码时学习和探索这些软件的更好设计。我没有要求观察者模式文档或客户端服务器体系结构。可能还有其他可能的手段,我不知道。所以我期待着任何想法,设计或框架。
Oberserver Pattern对于4个用例中的3个来说确实是正确的答案。
public interface Core {
sendFiles(List<File> files);
registerProgressListener(ProgressListener listener);
registerStatusListener(StatusListener listener);
registerMessageListener(MessageListener listener);
}
听众接口看起来真的类似于这样一个
public interface ProgressListener{
madeProgress(ProgressEvent)
}
ProgressEvent(另:
你的描述的水平,你可能会出现如下界面通过你的核心实现事件类)应该是值对象,例如
public class ProgressEvent {
public final double progress;
public final String fileName;
public ... // constructor
}
你可能希望你的核心和你的GUI在不同的线程中运行。否则,在核心运行时,GUI不会对任何事件做出反应。由于核心不应该知道关于GUI的任何信息,因此线程之间的切换应该由GUI来完成,即听众应该注意使用SwingUtilities.invokeLater
或invokeAndWait
来更新GUI。
也许这个答案看起来有点老派,但那些普通的旧IPCs呢?
使GUI将核心实例化为单独的线程,并仅通过消息队列(java.util.concurrent。*)进行通信。使用它们发送文件,事件,进度报告和几乎任何事物的列表。
然后你可以发货几个接口,只要所有的接口知道核心的入口点,你就可以开始工作。
有没有必要运行gui和核心在不同的进程 – 2012-04-05 15:36:31
完美。在我选择您的答案作为答案之前等待更多答复。 – 2012-04-05 17:02:51