2012-04-05 22 views
5

我正在开发一个项目。我试图实现核心作为独立的jar文件,可以从命令行甚至Windows服务运行。核心部分负责跟踪几个文件并发送一些通知邮件。问题是,保持GUI完全独立的最好方法是什么?如何让Java GUI完全独立于Core

的GUI需要下列互为作用与核心文件的

  • 发送列表
  • 接收来自核心关于多少这些文件已被处理的通知
  • 收到有关文件状态通知即送/加工/在GUI中显示失败等信息
  • 收到来自核心的入局消息的信息

我有用Delphi和C开发的这个软件.C被用来编码核心逻辑和使用Windows消息和回调,我在C DLL /服务上注册了Delphi GUI。我很困惑如何在java中实现它。

  • 观察者模式?
  • 核心与gui之间的小型客户端/服务器通信?

P.S: 我在这里讨论的原因是在Java中编写代码时学习和探索这些软件的更好设计。我没有要求观察者模式文档或客户端服务器体系结构。可能还有其他可能的手段,我不知道。所以我期待着任何想法,设计或框架。

回答

3

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.invokeLaterinvokeAndWait来更新GUI。

+0

完美。在我选择您的答案作为答案之前等待更多答复。 – 2012-04-05 17:02:51

1

也许这个答案看起来有点老派,但那些普通的旧IPCs呢?

使GUI将核心实例化为单独的线程,并仅通过消息队列(java.util.concurrent。*)进行通信。使用它们发送文件,事件,进度报告和几乎任何事物的列表。

然后你可以发货几个接口,只要所有的接口知道核心的入口点,你就可以开始工作。

+0

有没有必要运行gui和核心在不同的进程 – 2012-04-05 15:36:31