2

简短的问题

我想知道是否有关于为所有组件编写一个侦听器实例或为每个组件编写一个实例的良好实践建议。

扩展问题

我正在开发一个 java swing 应用程序。

在相同的形式中,我可以有十几个使用相同侦听器类的组件(它们之间没有关系)。我在他们自己的班级里写给我的每个听众。

侦听器用于对组件上引入的数据进行一些验证。

我应该为每个组件创建一个侦听器类的实例,还是应该为所有组件使用相同的侦听器实例。

除了这个没有指向任何参考的评论之外,我找不到任何关于此的良好实践建议。

4

4 回答 4

3

对于 的特殊情况ActionListener,使用 . 封装所需的功能Action。这个类在 Swing 中的广泛使用表明了它的价值。这个简单的例子说明了一些内置的文本组件动作;这个更详细的示例显示了如何在菜单和工具栏之间共享操作。

if-then-else另一种方法是基于事件源的不断增长且难以维护的阶梯。

附录:啊,我看错了你的问题。@Andrew 的评论是关于课程的;你的问题是关于实例的。对于前者,单个侦听器倾向于向已知的反模式演变;引用的示例的早期版本说明了这个问题。对于后者,只使用所需数量的实例;我通常会在探查器中发现最严重的违规行为。

于 2012-09-03T20:22:00.383 回答
2

我认为最好的解决方案是使您的代码尽可能干净的解决方案。

基本上,如果只有一个实例不会使代码过于复杂,那么您可以只创建一个实例并在组件之间共享它。否则,您可以有多个实例。

于 2012-09-03T17:43:19.430 回答
1

你应该选择一个让你的代码可读和可维护的。

如果创建实例使其更简单,请继续执行,但由于行为保持不变;我相信单个实例应该可以工作。

于 2012-09-03T17:43:16.987 回答
1

你的想法真的很有趣…………

Moveover 如果它的 Swing ......那么它已经基于MVC架构......

Model -业务逻辑和数据

View -输出的表示

Controller -执行操作的位置。

现在我认为它也更好Business Logic with its data together,因此我们可以轻松地将逻辑与其相应的数据关联起来。

您始终可以为common EventSource使用一个通用侦听器,例如...JButton

你可以有 4 个JButton,它们做不同的工作,现在你可以有一个 ActionListenerwithswitch语句......很容易处理......

于 2012-09-03T17:47:41.847 回答