技术文摘
面试必备:单例模式的多种写法
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();
}
}
这是一种较为优雅且线程安全的实现方式。
在面试中,了解并能熟练阐述这些单例模式的写法及其优缺点,将为您的面试表现加分不少。能够根据具体的业务场景选择合适的单例模式实现,更能展现您的技术水平和问题解决能力。
- 使用 C#开发远程桌面应用
- Python 数据类型:不可变与可变的深度剖析
- 深入剖析与实践 C++ 中的 Static 关键字
- 六种实现定时任务的策略
- Golang 高性能无 GC 的 bigcache 缓存库实现方式探究
- 生成式人工智能的变革趋势及其对软件开发的作用
- 轻松搞懂设计模式之代理模式
- 另一款超酷炫的 Python 动态数据可视化工具
- 2024 年怎样搭建新的 React 项目
- 53 道 JavaScript 前端基础面试真题
- C/C++中 do{} while() 与 while() do{} 的循环结构差异
- 20 个 Python 异常处理技巧助你提升编码效率
- C# 中实现 Socket 数据接收的三种经典方法
- .NET 微服务架构实战:从理念至部署的全面指引
- JS ES6 中的扩展运算符与剩余运算符