Java 这种情况下是否需要使用单例模式?
我正在创建一个微型软件应用程序,它使用多个“菜单屏幕”,如果你愿意的话。例如;主菜单屏幕、登录屏幕和应用程序支持的所有不同功能的屏幕。我目前正在使用以下类处理此问题:Java 这种情况下是否需要使用单例模式?,java,menu,garbage-collection,singleton,heap,Java,Menu,Garbage Collection,Singleton,Heap,我正在创建一个微型软件应用程序,它使用多个“菜单屏幕”,如果你愿意的话。例如;主菜单屏幕、登录屏幕和应用程序支持的所有不同功能的屏幕。我目前正在使用以下类处理此问题: public class ScreenUpdater { public static void updateScreen(JPanel screen, JFrame frame) { SwingUtilities.invokeLater(new Runnable() { @Ov
public class ScreenUpdater {
public static void updateScreen(JPanel screen, JFrame frame) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.remove(frame.getContentPane().getComponent(0));
frame.getContentPane().add(screen);
frame.invalidate();
frame.revalidate();
}
});
}
}
静态方法updateScreen()采用以下参数:- 出现在JFrame中的新屏幕(例如new LoginScreen(MainScreen mainScreenRef))(请注意,LoginScreen引用了主屏幕,因此它本身可以引用原始JFrame)
- 将在其中显示新屏幕的JFrame
- 我对这些实例的堆积的想法正确吗
- 如果是这样,这是使用单例模式的理想情况还是有更好的解决方案
- 这种方法本身就是一种非常糟糕的方法吗
澄清-这就是我提到垃圾收集问题时的意思。假设我们有一个名为LoginScreen()的类和一个名为login()的方法。方法login()实例化MainMenu()类,以便现在可以在JFrame中显示该类。在原始login()方法完成之前,将调用从MainMenu()类调用的任何方法。这让我相信原来的LoginScreen()不会被垃圾收集器收集。简单的回答是不,这听起来不像是使用singleton的理由 您已经说过,您担心即使在这些屏幕没有显示的情况下,您也会保留这些屏幕的实例:是什么让您相信这一点?如果您没有对它们的任何引用,那么它们将有资格进行垃圾收集。一旦该方法退出,假设您没有对屏幕的任何其他引用,那么该对象将有资格进行垃圾收集 然而,所有这些听起来都像是CardLayout的工作
如果您想了解更多信息,请发布。谢谢您的回答。我在问题末尾添加了一个更新。@quantum285,我的答案正确。方法调用的顺序实际上与某个对象是否符合垃圾收集条件无关。一旦该方法退出,假设您没有任何其他引用,那么它将有资格进行垃圾收集。不是顺序,而是层次结构。@quantum285,这仍然无关紧要。