1. 单例模式的核心价值与应用场景
单例模式可能是设计模式家族中最广为人知的一员。它的核心使命简单明确:确保一个类只有一个实例,并提供一个全局访问点。这种看似简单的约束背后,蕴含着对系统资源管理和对象访问控制的深刻思考。
在实际工程中,单例的典型应用场景包括:
- 配置管理类(避免多个配置实例导致数据不一致)
- 线程池/连接池(集中管理有限资源)
- 日志记录器(保证日志写入顺序)
- 设备驱动(如打印机后台服务)
注意:不要滥用单例模式。当类需要多态扩展或需要支持多实例时,强行使用单例会适得其反。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 单例模式的实现演进史
2.1 基础版(线程不安全)
java复制public class NaiveSingleton {
private static NaiveSingleton instance;
private NaiveSingleton() {}
public static NaiveSingleton getInstance() {
if (instance == null) {
instance = new NaiveSingleton();
}
return instance;
}
}
这个版本的问题在于多线程环境下可能创建多个实例。当线程A和B同时检查instance == null时,都可能进入创建逻辑。
2.2 同步方法版(线程安全但低效)
java复制public class SynchronizedSingleton {
private static SynchronizedSingleton instance;
private SynchronizedSingleton() {}
public static synchronized SynchronizedSingleton getInstance() {
if (instance == null) {
instance = new SynchronizedSingleton();
}
