Java 将一个动作组合为多个较小动作序列的正确方法?

Java 将一个动作组合为多个较小动作序列的正确方法?,java,action,abstract-action,Java,Action,Abstract Action,我有三个这样定义的动作: public class A extends AbstractAction; public class B extends AbstractAction; public class C extends AbstractAction; 现在我想定义一个按顺序执行这三个操作的巨型操作。我相信有一个更好的方法可以做到这一点,而不是做以下事情: public class JumboAction extends AbstractAction { ... public

我有三个这样定义的动作:

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。

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


也许你可以提供更多关于你问题的具体细节的信息,让我们更好地了解你的问题,因为这些细节可能与抽象概念一样或更重要。

你这样做很好

唯一不同的做法是将
actionPerformed(null)
替换为
actionPerformed(e)
。这将允许
A
B
C
在上下文中访问ActionEvent


编辑:如果动作
A
B
C
不打算单独使用,我建议在
JumboAction
类中将这些动作组合成三个方法。

在我看来,您似乎超出了动作类的目的,因为您将null传递给了actionPe格式化方法

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

它将消除复制代码的需要,并为您提供更干净的操作类,以完成它们应该做的事情

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


还可以查看命令模式,特别是宏命令区域。也许你可以从中受益。

因为三个较小的操作也可以单独调用,我不想重复代码!@Moeb:我想你可能希望让你的问题不那么抽象,更具体。你具体是什么试着用这个想法做什么?是什么问题驱动了这个问题?为这个问题添加了更多的解释。我认为你已经抽象了太多的问题,让我们无法理解。如果你静态地知道你想要执行哪些操作,以及以什么顺序执行,为什么你要做所有这些工作来使它们动态化,而不仅仅是硬编码您可以调用什么样的方法?听起来好像您想要将数量可变的ActionListener推送到一个队列上。您只需将
列表添加到
JumboAction
或其超类中即可