设计模式以减少Swing应用程序中的耦合

嘿所有,我正在研究Java Swing应用程序,我正在寻找一些指导。 应用程序相当小,但我注意到随着代码库越来越大,我在对象图中有很多耦合。 我对Swing来说相对比较新,但我已经编程了足够长的时间来了解它的发展方向。

我遇到的最大问题是设置我的事件处理。 我的子窗口和对象应该如何将事件传递给我的更高级别的对象而不引用它们? 我已经完成了相当数量的MVC网络编码。 这种模式是否适合Swing? 我应该建立自己的控制器吗? 我想我只是在捕捉人们发现使用Swing有用的模式。

在此先感谢您的帮助。

我认为,减少GUI中耦合的最佳方法是使用事件总线。 有几个现有的实现,包括一些支持Swing专门。

只需谷歌的秋季活动巴士 ,你会发现。

如果您在GUI中使用Guice ,您可能还需要查看guts-events 。

是。 MVC是你必须使用的。 这是一篇关于MVC和Swing的非常好的文章:

http://java.sun.com/products/jfc/tsc/articles/architecture/

另一个可能对你感兴趣的模式是MVP(Model View Presenter)-Pattern。 这非常适合将视图更松散地耦合到模型中。 Todd Snyder的一个很好的解释可以在这里找到。

正如您已经说过的,您打算使用MVC,或者您可能已经在使用MVC。 分离出数据后(我将其称为数据模型层)。 现在,您需要在这些数据模型类上应用OBSERVER模式。 使用此数据模型的所有视图(您的ui组件)都会观察此模型对象以进行任何更改(通过观察者模式)。

我希望这就是你要找的东西。

MVC !!! 然后,您还可以使用名为Publish / Subscribe的Observer变体来实现应用程序内的事件流。

我不同意建议使用事件总线的人 ,因为

  • 因为代码像EventBus.subscribe(SymbolListChangeEvent.class, this); 您的整个代码将依赖于单个事件总线实例,这使得测试非常困难,
  • 很难找出特定事件的使用位置。

相反,我建议使用接口来封装模块的外部依赖项。 如果您愿意,可以将它们与侦听器模式一起使用,但如果您愿意,通常可以自由地重构所有内容。

如果您想与层次结构中的其他GUI组件进行通信,那么您应该考虑使用单例来调解分支之间的调用。 见:

http://blue-walrus.com/2013/06/mediator-pattern-in-swing/