单例模式是一种常用的软件设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点。以下是一个简单的单例模式示例:
java
public class Singleton {
// 私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载
private static Singleton instance = null;
// 私有构造方法,防止被实例化
private Singleton() {
}
// 静态工厂方法,创建实例
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
在这个例子中,Singleton
类有一个私有的静态变量 instance
,它用于存储类的唯一实例。Singleton
类有一个私有的构造方法,防止外部通过 new
关键字创建实例。getInstance
方法用于返回 instance
变量的值,如果 instance
为 null
,则创建一个新的 Singleton
实例并返回。
这种方式实现的单例模式被称为“懒汉模式”,因为实例是在第一次调用 getInstance
方法时创建的。这种方式的优点是实现了延迟加载,但缺点是在多线程环境下可能会创建多个实例。为了解决这个问题,可以使用“双重检查锁定”模式:
java
复制
public class Singleton {
// 私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载
private static volatile Singleton instance = null;
// 私有构造方法,防止被实例化
private Singleton() {
}
// 静态工厂方法,创建实例
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class ) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
在这个例子中,instance
变量被声明为 volatile
,以确保在多线程环境下,instance
的值在第一次创建后不会被重排序。这样可以保证 instance
的值在多线程环境下的一致性。