拒绝为所有组件使用单个ActionListener?

时间:2012-08-10 05:09:13

标签: java swing model-view-controller actionlistener

对于路由操作请求,我想为所有组件使用单个ActionListener实例。可以使用setActionCommand来区分对actionPerformed的调用。

这是否建议?在MVC环境中,这种方法是否有任何潜在的缺点?

3 个答案:

答案 0 :(得分:6)

MVC只决定分割M,V和C.但它并没有要求某种关系的基数。所以你可以自由地去。

如果事件处理方法中的switch逻辑太复杂(比如几行),你可能想要考虑将一个庞大的类拆分成多个类。提供更好的概述和维护。相信我:如果你回到一个简单的听众来改变它,你会非常高兴。 这将是Refactoring然后;您的IDE可能会提供相应的支持。

所以我的建议是:KISS - 首先将你的东西放在一个听众中。如果它变得太复杂:再次使它变得简单,并重构为多个Listeners(这将是KISS的另一个应用程序)。

请记住保持代码简单,不要懒惰创建类。创建一个类比回到复杂的代码更简单。永远记住:创建软件是20%,维护是80%。使代码现在易于理解,以后维护将变得简单。反之亦然。

答案 1 :(得分:5)

这是否被建议?”我想象不到,但很多将取决于你的项目规模。

我认为“把你所有的鸡蛋放在一个篮子里”的说法浮现在脑海中。

当您向其添加新的操作分支时,if语句的大小可能变得难以想象。当你的项目复杂性增加时,你也会采取行动处理程序。

调试潜在问题也可能成为一个令人头痛的问题。

维护代码会变得乏味,容易产生误解,导致逻辑中没有新的错误。

你打破了职责规则的孤立(你应该尝试并在其自己的对象/类中分离对管理动作/事件的责任)

如果您正在寻找重用动作处理程序的方法,请查看Action API。如果您真的很渴望,可以使用工厂通过代码生成熟知的操作。这样可以在保持责任隔离的同时重复使用。

就个人而言,过去3年不得不花费时间来解决那些将核心库编写到我们系统并且喜欢这样编码的经验不足的毕业生的混乱局面,请不要这样做。这很容易打破,很难阅读,只是一个简单的混乱。

恕我直言,它说缺乏/或无法设计。

根据我的经验,这只是我的个人意见

答案 2 :(得分:2)

  • 最复杂的方式是添加EventHandler,它会触发事件,这个/这些事件could be compared in String value

  • 优点我不知道如何通过Reflection

  • String值作为参数传递给Java Classes}
  • 缺点(我的观点)需要最深入的知识,与Reflection相比

  • 可以提及下一个最佳选择Swing Action,很棒且可扩展,必须检查方法以isXxx开头

  • 对于MVC来说,是使用ProprertyChangeXxx

  • 构建代码和通过Swing方法分发事件的更好和正确的方法
  • JTextComponents使用TextAction而不是ProprertyChangeXxx(也许我错了,也许是错误的概念,没有什么能给我更好的选择)