面试必备:单例模式的多种写法

2024-12-31 02:06:14   小编

面试必备:单例模式的多种写法

在软件开发中,单例模式是一种常见且重要的设计模式。它确保一个类只有一个实例存在,并提供全局访问点。下面将为您介绍几种常见的单例模式写法。

懒汉式单例

懒汉式单例在第一次被调用时才创建实例,实现代码如下:

public class LazySingleton {
    private static LazySingleton instance;

    private LazySingleton() {}

    public static LazySingleton getInstance() {
        if (instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }
}

这种方式的优点是延迟加载,只有在需要时才创建实例,节省资源。但在多线程环境下可能会出现多个实例的问题。

饿汉式单例

饿汉式单例在类加载时就创建实例,代码如下:

public class EagerSingleton {
    private static final EagerSingleton instance = new EagerSingleton();

    private EagerSingleton() {}

    public static EagerSingleton getInstance() {
        return instance;
    }
}

饿汉式单例的优点是简单、线程安全,但可能会造成资源的提前消耗。

双重检查锁单例

为了解决懒汉式单例在多线程环境下的问题,可以使用双重检查锁,代码如下:

public class DoubleCheckSingleton {
    private static DoubleCheckSingleton instance;

    private DoubleCheckSingleton() {}

    public static DoubleCheckSingleton getInstance() {
        if (instance == null) {
            synchronized (DoubleCheckSingleton.class) {
                if (instance == null) {
                    instance = new DoubleCheckSingleton();
                }
            }
        }
        return instance;
    }
}

通过双重检查,既保证了线程安全,又提高了性能。

静态内部类单例

这种方式利用了 Java 的类加载机制,实现如下:

public class StaticInnerClassSingleton {

    private StaticInnerClassSingleton() {}

    public static StaticInnerClassSingleton getInstance() {
        return InnerClass.instance;
    }

    private static class InnerClass {
        private static final StaticInnerClassSingleton instance = new StaticInnerClassSingleton();
    }
}

这是一种较为优雅且线程安全的实现方式。

在面试中,了解并能熟练阐述这些单例模式的写法及其优缺点,将为您的面试表现加分不少。能够根据具体的业务场景选择合适的单例模式实现,更能展现您的技术水平和问题解决能力。

TAGS: 代码优化 单例模式 面试技巧 编程面试

欢迎使用万千站长工具!

Welcome to www.zzTool.com