刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

面试题

写出三种单例模式实现 。

使用微信搜索喵呜刷题,轻松应对面试!

答案:

解答思路:

单例模式是一种常用的软件设计模式,它用于限制某个类只能创建一个实例,并提供一个全局访问点。以下是三种常见的单例模式实现方法。

最优回答:

  1. 懒汉式单例模式(Lazy Initialization):
    • 在类初始化时不创建实例,而是在第一次调用 getInstance() 方法时才创建实例。
    • 使用双重检查锁定(double-checked locking)机制确保线程安全。示例代码如下:
public class Singleton {
    private static volatile Singleton instance; // 使用volatile关键字防止JVM指令重排导致的多线程问题

    private Singleton() {} // 私有构造函数,防止外部创建对象

    public static Singleton getInstance() {
        if (instance == null) { // 第一次检查实例是否存在
            synchronized (Singleton.class) { // 加锁,防止多线程同时创建实例
                if (instance == null) { // 第二次检查实例是否存在,如果为null则创建实例
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
  1. 饿汉式单例模式(Eager Initialization):
    • 在类加载时就创建实例,因此不存在线程安全问题。示例代码如下:
public class Singleton {
    private static final Singleton instance = new Singleton(); // 类加载时就创建实例

    private Singleton() {} // 私有构造函数,防止外部创建对象

    public static Singleton getInstance() {
        return instance; // 直接返回实例
    }
}
  1. 内部静态类实现单例模式(Inner Class):
    • 利用Java的类加载机制,通过内部静态类实现单例模式的懒加载。示例代码如下:
public class Singleton {
    private Singleton() {} // 私有构造函数,防止外部创建对象

    private static class SingletonHolder { // 内部静态类,用于持有单例实例
        private static final Singleton INSTANCE = new Singleton(); // 在静态内部类中初始化实例,实现懒加载
    }

    public static Singleton getInstance() { // 提供获取单例的方法
        return SingletonHolder.INSTANCE; // 返回单例实例
    }
}

解析:

除了上述三种常见的单例模式实现方法,还有其他变种如基于枚举的单例模式(Enumeration pattern)等。选择哪种实现方式取决于具体的应用场景和需求。另外,需要注意单例模式可能带来的问题,如全局访问点可能导致代码测试困难、系统扩展性降低等。因此在实际开发中应根据具体情况谨慎使用。
创作类型:
原创

本文链接:写出三种单例模式实现 。

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share