GUI 中的延迟初始化与急切初始化

Lazy initialization vs. eager initialization in GUI

我只是想知道在框架中创建组件时应该使用哪种类型的初始化。

假设我有一个包含多个按钮的框架:

public class MainFrame extends JFrame {
    private JTextField dynamicText; // accessible

    public MainFrame() {
        initComponents()
    }

    private void initComponents() {
        dynamicText = getText();
        JButton open = createButton();
        JButton close = createButton();
        close.setEnabled(false);

        add(open);
        add(close);

        setVisible(true);
    }

    private JButton createButton() {
        JButton button = new JButton();
        // some customizations, like size, icons etc.
        return button;
    }

    private JTextField getText() {
        if (this.dynamicText== null) {
            this.dynamicText= new JTextField();
            // some customization
        }
        return this.dynamicText;
    }

    public void updateText() {
        // code to update dynamicText
    }
}

这样做好吗?

您需要考虑以下因素来决定最适合使用的策略:

  • 如果初始化过程需要很长时间,您可以在使用前异步初始化它
  • 如果很少使用JFrame可以考虑按需初始化
  • 如果 JFrame 是动态的,则按需初始化它
  • 要创建更具可读性的代码,请使用热切的方法
  • 如果 JFrame 不是太重并且经常使用,请使用急切的方法

选择取决于您的显示要求和初始化延迟。为了获得最佳的用户体验,一般建议是考虑对需要时间填充或不立即显示的组件进行延迟初始化。否则,为简单起见,坚持急切初始化。