简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者
新书发布:《Android系统多媒体进阶实战》🚀
优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀
优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
🌻1. 前言
本篇目的:Java进阶之单例模式实现:用法实例
🌻2. Java单例模式介绍
-
基本概念
- 单例模式确保一个类只有一个实例,并提供一个全局访问点。
- 单例模式是设计模式中最常用的一种模式之一。
-
功能
- 确保类只有一个实例。
- 提供全局访问点,方便获取实例。
-
使用限制
- 单例类必须提供一个私有的构造方法。
- 单例类必须提供一个静态方法来获取实例。
-
性能特性
- 单例模式减少了对象的创建次数,节省内存。
- 合理使用单例模式可以提高代码的可读性和可维护性。
-
使用场景
- 广泛应用于需要全局访问点的场景,如配置管理、日志记录等。
- 特别适用于需要控制实例数量的场景。
🌻3. 代码实例
🌻3.1 饿汉单例模式
-
应用场景
- 在类加载时创建单例实例。
-
用法实例
public class EagerSingleton { private static final EagerSingleton instance = new EagerSingleton(); private EagerSingleton() { // 私有构造方法,防止外部实例化 } public static EagerSingleton getInstance() { return instance; } } public class EagerSingletonExample { public static void main(String[] args) { EagerSingleton instance = EagerSingleton.getInstance(); System.out.println("Instance: " + instance); } }
输出:
Instance: EagerSingleton@
🌻3.2 懒汉单例模式
-
应用场景
- 在第一次使用时创建单例实例。
-
用法实例
public class LazySingleton { private static LazySingleton instance; private LazySingleton() { // 私有构造方法,防止外部实例化 } public static synchronized LazySingleton getInstance() { if (instance == null) { instance = new LazySingleton(); } return instance; } } public class LazySingletonExample { public static void main(String[] args) { LazySingleton instance = LazySingleton.getInstance(); System.out.println("Instance: " + instance); } }
输出:
Instance: LazySingleton@
🌻3.3 双重校验锁单例模式
-
应用场景
- 在多线程环境下高效地创建单例实例。
-
用法实例
public class DoubleCheckSingleton { private static volatile DoubleCheckSingleton instance; private DoubleCheckSingleton() { // 私有构造方法,防止外部实例化 } public static DoubleCheckSingleton getInstance() { if (instance == null) { synchronized (DoubleCheckSingleton.class) { if (instance == null) { instance = new DoubleCheckSingleton(); } } } return instance; } } public class DoubleCheckSingletonExample { public static void main(String[] args) { DoubleCheckSingleton instance = DoubleCheckSingleton.getInstance(); System.out.println("Instance: " + instance); } }
输出:
Instance: DoubleCheckSingleton@
🌻3.4 单例模式实现总结
关键词 | 功能描述 | 典型应用 |
---|---|---|
饿汉单例模式 | 类加载时创建单例实例 | 适用于实例创建开销小的场景 |
懒汉单例模式 | 第一次使用时创建单例实例 | 适用于实例创建开销大的场景 |
双重校验锁单例模式 | 多线程环境下高效创建单例实例 | 适用于多线程场景,确保线程安全 |