单例工具-Singleton
# 单例工具-Singleton
# 模块介绍
Singleton是一个单例对象管理工具类,提供了单例对象的统一管理机制。当调用get方法时,如果对象池中存在此对象则返回,否则创建新对象并放入池中返回。它支持多种方式创建和管理单例对象,是实现单例模式的便捷工具。
# 为什么封装此模块
- 简化单例实现:无需手动编写双重检查锁定等复杂单例代码
- 统一管理:所有单例对象集中管理,便于维护和监控
- 支持带参构造:允许通过构造参数创建不同的单例实例
- 线程安全:基于ConcurrentHashMap实现,确保多线程环境下的安全性
- 灵活扩展:支持自定义键和创建函数,适应各种单例场景
- 便于测试:提供了销毁和移除方法,方便单元测试
# JDK问题解决
传统单例模式实现存在以下问题:
- 代码冗长,需要手动处理线程安全问题
- 不支持带参数的构造方法创建不同实例
- 缺乏统一的管理机制,单例对象分散在各处
- 难以在运行时动态替换或销毁单例对象
- 测试困难,单例状态难以重置
Singleton工具通过统一的对象池管理,解决了这些问题,提供了更灵活、更易用的单例实现方式。
# 相关JDK模块
java.util.concurrent.ConcurrentHashMap:用于存储单例对象,确保线程安全java.lang.reflect:用于通过反射创建对象实例java.util.Set:用于返回存在的类集合
# API文档
# get方法(按类获取)
# 功能说明
获得指定类的单例对象。对象存在于池中返回,否则创建,每次调用此方法获得的对象为同一个对象。注意:单例针对的是类和参数,也就是说只有类、参数一致才会返回同一个对象。
# 方法签名
public static <T> T get(final Class<T> clazz, final Object... params)
# 示例
// 无参构造创建单例
User user1 = Singleton.get(User.class);
User user2 = Singleton.get(User.class);
Console.log(user1 == user2); // true