所有组件的java一个侦听器instance或每个组件的一个实例
简短问题
我想知道是否有关于为所有组件编写一个listener instance或为每个组件编写一个实例的良好实践建议
扩展问题
我正在开发一个JavaSwing应用程序
以同样的形式,我可以有十几个使用相同侦听器类的组件(它们之间没有关系)。我在自己的课堂上给每个听众写信
侦听器用于对组件上引入的数据进行一些验证
我应该为每个组件创建侦听器类的实例,还是应该为所有组件使用相同的侦听器实例
我找不到关于这方面的任何好的实践建议,除了this comment,它没有指向任何参考
# 1 楼答案
对于} 封装所需的功能。这个类在整个Swing中的宽度use表明了它的价值。这个简单的example演示了一些内置的文本组件操作;这个更详细的example展示了如何在菜单和工具栏之间共享操作
ActionListener
的特定情况,使用^{另一种选择是基于事件源的不断增长且难以维护的
if-then-else
梯形图附录:啊,我误解了你的问题@安德鲁的comment是关于类;您的问题询问了实例。对于前者,单个听者倾向于向aknown anti-pattern进化;引用的example的早期版本说明了这个问题。对于后者,仅根据需要使用尽可能多的实例;我通常在一次通过分析器的旅行中捕捉到最严重的违规行为
# 2 楼答案
我认为最好的解决方案是使您的代码尽可能干净
基本上,如果只有一个实例不会使代码太复杂,那么您可以只创建一个实例并在组件之间共享它。否则,您可以有多个实例
# 3 楼答案
你的想法真的很有趣
如果它的摆动。。。。那么它已经基于
MVC
架构Model
-业务逻辑和数据View
-输出的表示Controller
-对其执行操作现在我认为最好有
Business Logic with its data together
,这样我们就可以很容易地将逻辑与其对应的数据关联起来对于公共事件源,始终可以有一个公共侦听器,如
JButton
您可以有4个
JButton
,它们执行不同的工作,现在您可以有一个带有switch
语句的ActionListener
。。。。。很容易处理# 4 楼答案
您应该选择一个可以保持代码可读性和可维护性的代码
如果创建实例使它变得更简单,那么继续做吧,但因为行为保持不变;我相信单例应该有效