前言:
欢迎来到本篇博客,今天我们将深入研究 Java 中一种经典的设计模式——单例模式。单例模式确保一个类只有一个实例,并提供一个全局访问点,使得该实例可以被全局范围内的代码访问。
1. 什么是单例模式?
单例模式是一种创建型设计模式,它保证一个类仅有一个实例,并提供一个全局访问点。这样的设计旨在节省系统资源,确保某个特定类只有一个实例存在。
2. 单例模式的实现方式:
3. 懒汉式单例模式:
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {
// 私有构造方法
}
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
4. 饿汉式单例模式:
public class EagerSingleton {
private static final EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {
// 私有构造方法
}
public static EagerSingleton getInstance() {
return instance;
}
}
5. 双重检查锁单例模式:
public class DoubleCheckedSingleton {
private static volatile DoubleCheckedSingleton instance;
private DoubleCheckedSingleton() {
// 私有构造方法
}
public static DoubleCheckedSingleton getInstance() {
if (instance == null) {
synchronized (DoubleCheckedSingleton.class) {
if (instance == null) {
instance = new DoubleCheckedSingleton();
}
}
}
return instance;
}
}
6. 静态内部类单例模式:
public class InnerClassSingleton {
private InnerClassSingleton() {
// 私有构造方法
}
private static class SingletonHolder {
private static final InnerClassSingleton instance = new InnerClassSingleton();
}
public static InnerClassSingleton getInstance() {
return SingletonHolder.instance;
}
}
7. 枚举单例模式:
public enum EnumSingleton {
INSTANCE;
// 可以添加其他方法和属性
}
8. 单例模式的应用场景:
9. 实际案例:
public class SingletonExample {
public static void main(String[] args) {
LazySingleton lazyInstance = LazySingleton.getInstance();
EagerSingleton eagerInstance = EagerSingleton.getInstance();
DoubleCheckedSingleton doubleCheckedInstance = DoubleCheckedSingleton.getInstance();
InnerClassSingleton innerClassInstance = InnerClassSingleton.getInstance();
EnumSingleton enumInstance = EnumSingleton.INSTANCE;
// 使用单例实例...
}
}
在上述例子中,我们展示了五种不同的单例模式的实现方式,根据具体需求选择适合的实现方式。
结语:
通过本文的介绍,希望您对Java中的单例模式有了更深刻的了解。单例模式是一种经典的设计模式,在许多场景下都有着广泛的应用。感谢阅读,期待下次再访!