📅  最后修改于: 2023-12-03 14:49:09.759000             🧑  作者: Mango
Singleton模式是指某个类只允许创建一个实例,且该实例提供了一个全局访问点。在实际应用中,Singleton模式往往被用来代表全局唯一的资源,例如配置文件、日志文件等等。
在Java中,Singleton模式的实现方式通常有两种:
饿汉式单例模式是在类加载的时候就进行实例化,没有延迟加载的风险,因此是线程安全的。
示例代码如下:
public class EagerSingleton {
private static final EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return instance;
}
}
懒汉式单例模式在类加载时并不进行实例化,而是在第一次访问该实例时进行实例化,因此可能存在线程安全的问题。
示例代码如下:
public class LazySingleton {
private volatile static LazySingleton instance = null;
private LazySingleton(){}
public static LazySingleton getInstance() {
if (instance == null) {
synchronized (LazySingleton.class) {
if (instance == null) {
instance = new LazySingleton();
}
}
}
return instance;
}
}
注意:
在我的框架中,我一般会使用懒汉式单例模式,因为懒汉式单例模式在使用时才进行实例化,能够降低资源的启动时间,提高系统的性能。
同时,在应用中,我们可能需要多个单例实例时,就需要使用多例模式,可以通过维护一个Map结构,将多个单例实例存储在Map中,实现多例模式。
示例代码如下:
public class MultiSingleton {
private static Map<String, MultiSingleton> instanceMap = new HashMap<String, MultiSingleton>();
static {
instanceMap.put("Singleton1", new MultiSingleton());
instanceMap.put("Singleton2", new MultiSingleton());
}
private MultiSingleton(){}
public static MultiSingleton getInstance(String instanceName) {
return instanceMap.get(instanceName);
}
}
以上就是Singleton模式的介绍和实现方式,在实际应用中,我们需要根据实际情况选择不同的实现方式,以达到最优的效果。