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

时间:2010-07-28 03:10:54

标签: java user-interface swing design-patterns

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

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

提前感谢您的帮助。

7 个答案:

答案 0 :(得分:5)

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

只需google for swing event bus即可找到。

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我不同意建议使用Event bus的人,因为

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

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

答案 6 :(得分:0)

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

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