当前位置:实例文章 » 其他实例» [文章]【单例模式】饿汉模式和懒汉模式的单例模式

【单例模式】饿汉模式和懒汉模式的单例模式

发布人:shili8 发布时间:2024-12-27 06:11 阅读次数:0

**单例模式**

单例模式是一种常见的设计模式,它确保一个类在整个应用程序中只有一个实例。这种模式涉及到创建一个全局访问点,以便能够从任何地方获取该类的一个实例。

在本文中,我们将讨论两种最常见的单例模式实现:饿汉模式和懒汉模式。

**饿汉模式**

饿汉模式是最简单也是最直接的实现方式。它通过在类加载时就创建一个实例来保证只有一个实例存在。

javapublic class HungrySingleton {
 // 在类加载时就创建一个实例 private static final HungrySingleton INSTANCE = new HungrySingleton();

 // 私有化构造函数,防止外部创建实例 private HungrySingleton() {}

 public static HungrySingleton getInstance() {
 return INSTANCE;
 }
}


饿汉模式的优点是简单易懂,并且线程安全。但是,它在类加载时就创建了一个实例,这可能会导致资源浪费。

**懒汉模式**

懒汉模式则是在需要实例时才创建它。这种实现方式通过延迟实例化来减少资源的占用。

javapublic class LazySingleton {
 // 私有化构造函数,防止外部创建实例 private LazySingleton() {}

 // 在第一次调用getInstance方法时创建实例 private static volatile LazySingleton instance;

 public static LazySingleton getInstance() {
 if (instance == null) {
 synchronized (LazySingleton.class) {
 if (instance == null) {
 instance = new LazySingleton();
 }
 }
 }
 return instance;
 }
}


懒汉模式的优点是资源占用较少。但是,它在多线程环境下可能会导致实例创建多次,从而破坏单例模式。

**双重检查锁定**

为了解决懒汉模式在多线程环境下的问题,我们可以使用双重检查锁定来确保实例的线程安全。

javapublic class DoubleCheckLockingSingleton {
 // 私有化构造函数,防止外部创建实例 private DoubleCheckLockingSingleton() {}

 // 在第一次调用getInstance方法时创建实例 private volatile static DoubleCheckLockingSingleton instance;

 public static DoubleCheckLockingSingleton getInstance() {
 if (instance == null) {
 synchronized (DoubleCheckLockingSingleton.class) {
 if (instance == null) {
 instance = new DoubleCheckLockingSingleton();
 }
 }
 }
 return instance;
 }
}


双重检查锁定的优点是资源占用较少,并且线程安全。但是,它的实现复杂度较高。

**总结**

在本文中,我们讨论了饿汉模式和懒汉模式两种单例模式实现。饿汉模式简单易懂,但可能导致资源浪费;懒汉模式资源占用较少,但可能破坏单例模式;双重检查锁定则是线程安全的,但实现复杂度较高。

选择哪种模式取决于具体需求和场景。如果需要快速简单的实现,饿汉模式是一个不错的选择。如果需要资源占用较少的实现,懒汉模式是一个更好的选择。如果需要线程安全且资源占用较少的实现,双重检查锁定是一个更好的选择。

相关标签:单例模式
其他信息

其他资源

Top