技术文摘
面试必备:单例模式的多种写法
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();
}
}
这是一种较为优雅且线程安全的实现方式。
在面试中,了解并能熟练阐述这些单例模式的写法及其优缺点,将为您的面试表现加分不少。能够根据具体的业务场景选择合适的单例模式实现,更能展现您的技术水平和问题解决能力。
- 六问 Kafka 牛在哪里
- 从语义网走向知识图谱
- 探秘鲜为人知的 Proxy
- Coco 助力的轻量级架构可视化实现
- 淘宝的一个 bug 助我理解其底层逻辑与顶层设计
- NPOI 操作 Excel 基础之 NPOI
- 字节跳动常考的前端 JavaScript 基础面试题
- 源码剖析:NextTick 的作用究竟为何
- React Core Team 成员开发的火焰图组件技术解析
- CSS 中短内容与长内容的处理方法
- Go1.16 新特性:快速上手 Go embed 指南
- 前端批量接口怎样实现快速响应?有无通用办法?
- Node 开发命令行工具的由浅入深讲解
- Web 现代应用程序架构中的性能优化:渐进式的巅峰艺术
- Ubuntu 全新安装程序正在开发中