【发布时间】:2012-04-23 05:27:17
【问题描述】:
好的,我有一个包含多个 Menu 和 MenuItem 的类(我们称之为:MenuBarClass)。 我想为每个 MenuItem 分配一个动作监听器,但是.. 而不是做类似的事情:
menuitem_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {} });
menuitem_2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {} });
menuitem_3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {} });
// ...
menuitem_N.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {} });
我希望我的代码更易于维护,而且……更重要……我不希望在一个巨大的 ActionListener 类中出现很多“如果”,例如:
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(menuitem_1)) {
//do stuff..
} else if (e.getSource().equals(menuitem_2)) {
//do stuff..
} else ...
}
如果可能的话,我该怎么做? 有人可以帮忙吗?
【问题讨论】:
-
我想你也许可以在这里使用命令模式。
-
我不知道命令模式是什么,也不知道如何在这种情况下(或任何其他情况)使用它。你能帮帮我吗?
-
不,抱歉,Java 适合你。假设在各个菜单项的处理程序之间没有可重用的通用代码,您的第一个代码示例中的语法是您可以获得的最佳语法。
-
我不敢相信,如果我有 100 个不同的按钮,那么在 Java 中,没有一种单一的解决方案可以用来提高我的代码的可维护性。
-
command pattern 可能在这里使用。但是,您必须为每个按钮创建一个命令对象,它的用处可能可以忽略不计。
标签: java actionlistener code-maintainability