请原谅含糊不清的问题标题,但通常我不会做这种事情。所以我有以下问题:
我正在为特定的应用程序设计一个弹出菜单,其中每个菜单项都与某个动作相关联:
public class CanvasMenu extends JPopupMenu {
public CanvasMenu(){
this.add(new AbstractAction("Do some operation") {
@Override
public void actionPerformed(ActionEvent arg0) {
doSomeStuff1();
cleanup(); // has to be done after every menu operation
}
});
this.add(new AbstractAction("Other operation") {
@Override
public void actionPerformed(ActionEvent e) {
doSomeOtherStuff();
cleanup(); // has to be done after every menu operation
}
});
}
}
我读到某处
AbstractAction
用于此类任务,您想在其中添加菜单项并将其与某些操作相关联。实际上,我不仅想要两个这样的动作,而且想要几十个这样的动作。问题是
cleanup
问题。 cleanup
应该在选择任何这些动作之后。这意味着,如果我以上述方式继续,我将必须为每个cleanup()
编写AbstractAction
。有什么(简单/优雅/漂亮)的方式或模式可以避免一遍又一遍地写
cleanup()
吗?即是否有可能设计出只会执行操作并在执行后自动调用cleanup
的内容? 最佳答案
这是模式之一:
abstract class ActionWithCleanup extend AbstractAction {
@Override
public final void actionPerformed(ActionEvent arg0) {
myAction();
cleanup(); // has to be done after every menu operation
}
public abstract void myAction();
}
...
this.add(new ActionWithCleanup("Do some operation") {
@Override
public void myAction() {
doSomeStuff1();
}
});