技术文摘
单例模式的 7 种实现方式,你了解多少?
2024-12-31 13:49:56 小编
单例模式的 7 种实现方式,你了解多少?
在编程领域中,单例模式是一种常见且实用的设计模式。它确保一个类只有一个实例存在,并提供全局访问点。下面让我们来深入探讨单例模式的 7 种实现方式。
- 饿汉式 这种方式在类加载时就创建实例,简单直接,但可能造成资源浪费,如果实例的创建开销较大且不一定会被使用,就不太合适。
public class Singleton1 {
private static Singleton1 instance = new Singleton1();
private Singleton1() {}
public static Singleton1 getInstance() {
return instance;
}
}
- 懒汉式(线程不安全) 在需要的时候才创建实例,但在多线程环境下可能会创建多个实例。
public class Singleton2 {
private static Singleton2 instance;
private Singleton2() {}
public static Singleton2 getInstance() {
if (instance == null) {
instance = new Singleton2();
}
return instance;
}
}
- 懒汉式(线程安全) 通过同步方法来保证线程安全,但效率较低。
public class Singleton3 {
private static Singleton3 instance;
private Singleton3() {}
public static synchronized Singleton3 getInstance() {
if (instance == null) {
instance = new Singleton3();
}
return instance;
}
}
- 双重检查锁 结合了懒汉式和同步锁,提高了性能。
public class Singleton4 {
private static volatile Singleton4 instance;
private Singleton4() {}
public static Singleton4 getInstance() {
if (instance == null) {
synchronized (Singleton4.class) {
if (instance == null) {
instance = new Singleton4();
}
}
}
return instance;
}
}
- 静态内部类 利用了类加载机制,实现了延迟加载和线程安全。
public class Singleton5 {
private Singleton5() {}
private static class SingletonHolder {
private static final Singleton5 INSTANCE = new Singleton5();
}
public static Singleton5 getInstance() {
return SingletonHolder.INSTANCE;
}
}
- 枚举 简洁且线程安全。
public enum Singleton6 {
INSTANCE;
}
- 注册式单例 通过容器来管理单例对象,灵活性较高。
不同的实现方式各有优缺点,需要根据具体的应用场景来选择。在实际开发中,要综合考虑性能、线程安全、资源消耗等因素,选择最合适的单例模式实现方式。
深入理解和掌握单例模式的多种实现方式,能够让我们在编程中更加灵活和高效地运用这一设计模式,提升代码的质量和可维护性。
- 轻松解读 spring 之 IOC 主干流程(上)
- Spring++框架无需'if'照样"肝"
- Python 中判断牛熊的方法
- C# Winform 中动态生成控件的实现方法
- 2020 年 Go 开发者调查报告:92%受访者对使用 Go 满意
- Python 如何捕获警告(非捕获异常)
- 10 个适合初学者的免费软件开发资源
- JavaScript 中 Object.is() 与 === 运算符的差异
- 网站测试的 9 个要点
- 精通 JS 必备:函数式 array 逻辑判断的 7 个高阶函数解析
- C 语言学习:完整进制转换及整数与小数内存存储模型解析
- 在 Fedora 中运用 Poetry 管理 Python 项目的方法
- Java 编程核心:数据结构与算法「前缀、中缀、后缀」
- Git 仓库管理的 6 个优秀实践
- 奇特的知识要点:以代码运行代码