当前位置: 首页 > 面试题库 >

如何以适当的方式写单例?

古凌
2023-03-14
问题内容

今天,在我的采访中,一位面试官要求我写一个单例课程。我给我的答案是

public class Singleton {

    private static Singleton ref;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (ref == null) {
            ref = new Singleton();
        }
        return ref;
    }
}

突然他告诉我这是上课的老方法。谁能帮我他为什么这么说。


问题答案:

创建单例时,我想到的第一件事是enum。我通常使用enum实现单例:

enum Singleton {
    INSTANCE;
}

使用枚举可为您带来的好处之一就是序列化。

对于单例类,您将必须确保通过实现readResolve()方法来确保序列化和反序列化不会创建新实例,而enum并非如此。

使用类,您应该这样创建单例:

public final class Singleton implements Serializable {
    // For lazy-laoding (if only you want)
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    private Singleton() {
        if (SingletonHolder.INSTANCE != null) {
            // throw Some Exception
        }
    }

    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }

    // To avoid deserialization create new instance
    @SuppressWarnings("unused")
    private Singleton readResolve() {
        return SingletonHolder.INSTANCE;
    }
}


 类似资料:
  • 今天,在我的面试中,一个面试官让我写一个单件课。我的回答是 突然,他告诉我这是写这门课的老方法。有谁能告诉我他为什么那样说。

  • 问题内容: 我目前正在使用学校管理软件,该软件通常需要导出包含和的html内容。 我已经尝试了所有可能的方法来编写代码,从而能够以一种很好的方式(最好是使用CSS)导出html数据。在这里检查了一些问题和答案之后,我尝试使用spdf,但是没有运气。 它一直在破坏我的表对齐方式,然后我读了一下,但是要实现它是我的问题,如果要使用div标签,则要捕获内容,然后发送画布以将画布导出为pdf。 这是我的代

  • 问题内容: 在mysql中是否可以格式化适当大小写的列? 例: 我进行了很多搜索,我认为MySQL没有任何内置函数可以执行此操作。有可能在MySQL中以其他任何方式执行此操作吗? 问题答案: 您可以结合使用CONCAT和SUBSTRING:

  • 我想写一个包含我们想在项目中使用的函数的Python文件。我们正在为Instagram开发一个硒网刮擦机器人。现在我们在脚本中编写所有的函数,但是我们想制作一个“函数”文件,我们将导入并用于我们的脚本。但问题是,当我想使用像

  • 上面的代码是创建魔方的代码。我如何以更简单的形式编写下面的代码,让java初学者能够理解?