0

我定义了三个动作,如下所示:

public class A extends AbstractAction;
public class B extends AbstractAction;
public class C extends AbstractAction;

现在我想定义一个按顺序执行这三个动作的巨型动作。我确信有比执行以下操作更好的方法:

public class JumboAction extends AbstractAction {

  ...

  public void actionPerformed(ActionEvent e) {
    new A().actionPerformed(null);
    new B().actionPerformed(null);
    new C().actionPerformed(null);
  }
}

我只是不知道更好的方法是什么。有人可以指点我吗?


要按照答案中的建议添加更多上下文,我的应用程序有一些 UI 元素(如节点和边),用户可以选择一堆节点并对它们执行 A、B、C 或 JumboAction。

4

3 回答 3

0

在我看来,一个控件调用其他控件的想法对我来说并不正确,就好像您将控件与模型混淆了一样(也忽略了您对 ActionEvents 的 null 使用)。控件应该通过调用模型方法来改变模型的状态。为什么不让您的巨型控件调用三个(或更多)模型方法或任何其他所需的方法,以完成其需求。

也许您可以通过提供有关您的问题的具体细节的更多信息来让我们更好地理解您的问题,因为它们可能与抽象概念一样或更重要。

于 2013-09-09T03:01:01.067 回答
0

你这样做的方式很好。

我唯一会做不同的事情是替换actionPerformed(null)actionPerformed(e). 这将允许ABC在上下文中访问 ActionEvent。

编辑:如果 actions ABC也不打算单独使用,我建议将这些操作组合成JumboAction类中的三个方法。

于 2013-09-09T03:03:06.437 回答
0

在我看来,您超出了 Action 类的目的,因为您将 null 传递给 actionPerformed 方法。

考虑将您的执行逻辑(业务或其他)封装在一组单独的类中,并从操作中调用它们。

它将消除复制代码的需要,并为您提供更简洁的 Action 类,这些类可以完成它们应该做的事情。

如果您希望使用相同的顺序,您可以使用另一种方法以预定义的顺序调用业务逻辑类。

还要查看命令模式,尤其是宏命令区域。也许您可以从中受益。

于 2013-09-09T03:07:05.033 回答