2012-08-08 55 views
2

我有一个Java Swing应用程序。我想将信息上传到Web端点,并且该过程需要足够的时间来证明将工作转移到另一个线程上。我想使用Swing SwingWorker范例来实现这一点。我很困惑我应该在哪里扩展SwingWorker。我使用什么类来扩展SwingWorker?

现在,我为每个Web端点都有一个类,并且该类存储了发往该端点的所有数据,以及与端点连接所需的代码(位于名为upload()的方法下)。这些类是否应该实现SwingWorker,因为所有数据都需要执行它的任务?或者我应该有一个辅助类FooWorker实现SwingWorker,它将从一个内部Site对象调用Upload()?

如果我做一个二次FooWorker类,然后好像我不得不去一些麻烦的东西引用到现场为我实例(每个网络端点的一个线程/工人)每个FooWorker对象,但该网站不会被一堆SwingWorker方法和代码所污染。

如果我使用Site类扩展SwingWorker,那么我可以直接从EDT为每个站点调用.execute(),这对于我来说比每个站点创建一个工作者更清洁,然后让该工作者从该网站调用upload()。

只是寻找关于哪种方法更好的意见和想法。 Site类已经相当复杂了,如果我扩展SwingWorker类,恐怕会在其中添加一堆不相关的域。但是,如果我去那条路线,FooWorker类基本上只是Site类的一个薄包装。这种包装是否值得让Site类只关注其自己的域方法/数据?

回答

2

在有意义的地方引入抽象总是个好主意。在这种情况下,我会说这是有道理的,因为您最终可能会创建几个SwingWorker类。

你可以考虑的是创建一个叫做SiteWorker的SwingWorker类。然后,我会创建实现方法upload()的Site接口。表示到站点端点的连接的每个类都将实现此Site接口。然后,您可以简单地让SiteWorker处理Site接口,而不必处理实现SwingWorker的所有不同种类的Site类。记住,编程接口而不是实现。如果您只需创建一个SiteWorker,然后专注于各种网站实施,它将使您的生活更轻松。因此,您可以将Site实例(可以是任何实现Site的类)作为参数传递给SiteWorker类,然后在其doInBackground()方法中简单地调用实现实例的upload()方法现场。

相关问题