技术文摘
面试必备:单例模式的多种写法
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();
}
}
这是一种较为优雅且线程安全的实现方式。
在面试中,了解并能熟练阐述这些单例模式的写法及其优缺点,将为您的面试表现加分不少。能够根据具体的业务场景选择合适的单例模式实现,更能展现您的技术水平和问题解决能力。