我有一个关于如何在Swing中实施动作的人。单身动作对多实例动作
我的想法是创建一个类用于扩展AbstractAction这样我就可以在必须具有相同行为的许多组件都使用我的应用程序的每个动作。所以我finaly有一些如:
public class ActionExample extends AbstractAction {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Do something");
}
}
好了,现在我想用它,我在我的脑海三个选项:
public void makeUI1() {
JButton btn = new JButton(new ActionExample("Do it"));
JMenuItem mi = new JMenuItem(new ActionExample("Do it"));
}
public void makeUI2() {
Action a = new ActionExample("Do it");
JButton btn = new JButton(a);
JMenuItem mi = new JMenuItem(a);
}
或者使用它作为一个单身(也改变ActionExample):
public void makeUI2() {
JButton btn = new JButton(ActionExample.getInstance());
JMenuItem mi = new JMenuItem(ActionExample.getInstance());
}
public class ActionExample extends AbstractAction {
private static final ActionExample INSTANCE = new ActionExample("Do it");
public static Action getInstance() {
return INSTANCE;
}
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Do something");
}
}
我的第一个观点是使它通过单一实例,但我在Oracle教程看到它设置成组件之前,做一个新的实例,并在我还看到很多代码创建新实例对于每个组件,我不知道它是什么更好,为什么。
首选的方法之一是用于其他?