单例模式(Singleton Pattern)
定义
单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供该实例的全局访问点。
UML 类图
核心特点
- 私有化构造器:禁止外部直接创建对象。
- 静态实例:通过静态方法提供唯一实例。
- 线程安全(可选):防止多线程环境下重复创建实例。
优点
- 严格控制实例数量:确保全局唯一性,避免资源冲突(如配置文件、线程池)。
- 节省资源:避免频繁创建销毁对象,提升性能(如数据库连接池)。
- 全局访问点:方便其他模块访问统一实例(如日志记录器)。
缺点
- 违反单一职责原则:单例类既管理实例创建,又承担业务逻辑。
- 难以扩展:因构造器私有化,无法通过继承扩展功能。
- 测试困难:全局状态难以隔离,影响单元测试独立性。
- 线程安全问题:需额外处理多线程环境下的竞态条件(如未加锁的懒汉式)。
适用场景
全局唯一资源管理
- 配置管理器(如 ConfigManager)
- 日志记录器(如 Logger)
- 应用计数器(如 IDGenerator)
共享资源池
- 线程池(如 ThreadPool)
- 数据库连接池(如 DatabaseConnectionPool)
- 缓存系统(如 CacheManager)
硬件设备控制
- 打印任务队列(如 PrinterSpooler)
- 系统时钟(如 SystemClock)
饿汉式
实现起来简单,没有多线程同步问题。空间换时间
懒汉式(非线程安全)
使用时再进行初始化,非线程安全
懒汉式(双重检查锁,线程安全)
使用时再进行初始化,线程安全
静态内部类(线程安全)
线程安全