单例模式(Singleton Pattern)是软件设计模式中最常用的一种设计模式。它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。单例模式广泛应用于各种场景,如数据库连接、文件操作、配置对象等。本文将深入剖析单例模式的核心代码,帮助读者掌握其精髓。
单例模式的基本原理
单例模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。其核心在于私有构造函数、静态变量和静态方法。
私有构造函数
私有构造函数防止外部通过 new 关键字创建类的实例。
public class Singleton {
private static Singleton instance;
private Singleton() {
// 私有构造函数,防止外部创建实例
}
}
静态变量
静态变量用于存储类的唯一实例。
private static Singleton instance;
静态方法
静态方法用于提供全局访问点。
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
单例模式的实现方式
单例模式的实现方式有多种,以下列举几种常见的实现方式:
懒汉式
懒汉式单例在第一次调用 getInstance() 方法时创建实例。
public class Singleton {
private static Singleton instance;
private Singleton() {
// 私有构造函数,防止外部创建实例
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
饿汉式
饿汉式单例在类加载时就创建实例。
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {
// 私有构造函数,防止外部创建实例
}
public static Singleton getInstance() {
return instance;
}
}
双重校验锁
双重校验锁单例在多线程环境下确保只创建一个实例。
public class Singleton {
private static volatile Singleton instance;
private Singleton() {
// 私有构造函数,防止外部创建实例
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
静态内部类
静态内部类单例利用静态内部类延迟加载实例,确保线程安全。
public class Singleton {
private Singleton() {
// 私有构造函数,防止外部创建实例
}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
总结
本文深入剖析了单例模式的核心代码,介绍了多种实现方式。通过掌握单例模式,读者可以更好地理解和运用经典设计模式,提高代码质量。在实际开发中,应根据具体需求选择合适的单例模式实现方式。
